-
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} не помог! :(
-
Библиотека начинается предложением 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 - помогло.
Как всё просто оказалось, однако!