Конференция "FreePascal" » Как вызвать DLL из C++ [Win32]
 
  • Stargazer (25.10.04 18:11) [0]
    Здравствуйте!
    Подскажите, что я неправильно делаю и куда копать?

    Написал на FPC 1.06 тестовую dll-ку, а при попытке вызвать её из проги на С++ (компилер MSVC), возникает такая ругань:

    Debug error!
    Run-time Check Failure #0 ... и так далее

    Вот код DLL-ки:

    library testdll;

    function TestSumSingle(arg1,arg2 : Single):Single; stdcall; export;
    begin
        TestSumSingle := arg1+arg2;
    end;

    function TestSumInteger(arg1,arg2 : integer):integer; stdcall; export;
    begin
        TestSumInteger := arg1+arg2;
    end;

    exports
        TestSumSingle,
        TestSumInteger;

    begin
    end.

  • Stargazer (25.10.04 18:44) [1]
    Может, ещё при компиляции С++ проги, нужны ещё и объектные модули libtestdll.aw, testdll.ow?
    (я сейчас доку читаю усиленно, но может, добрые люди быстрей подскажут :)))
  • PVOzerski © (25.10.04 19:29) [2]
    Вижуал Си под руками нет, поэтому только догадки... По умолчанию FPC/Win32 делает консольные приложения и dll-и. Может, {$apptype GUI} или соответствующий ключ -WG помогут?
  • Stargazer (25.10.04 21:28) [3]
    {$apptype GUI} не помог! :(
  • palva © (29.10.04 21:10) [4]
    Библиотека начинается предложением library <имя-библиотеки>;
    Компиляция производится с параметром -CD. Пример:

    Файл uu.pp
    ----------

    library uu;

    function p1(n:integer):integer;
    begin
     p1:=n+1;
    end;

    function p2(n:integer):integer;
    begin
     p2:=n-4;
    end;

    exports
    p1, p2;

    begin
    end.


    Вот как к ней можно обратиться из VBA:

    Declare Function MyFun Lib "C:\C\FPW\uu.dll" Alias "p1" _
     (ByVal n As Integer) As Integer

    Sub Макрос2()
     MsgBox (MyFun(6))
    End Sub


    Макрос показывает окно c числом 7.
  • Stargazer (07.11.04 08:30) [5]
    Поменял  stdcall на cdecl - помогло.
    Как всё просто оказалось, однако!
 
Конференция "FreePascal" » Как вызвать DLL из C++ [Win32]
Есть новые Нет новых   [134430   +2][b:0][p:0.001]