【发布时间】:2011-01-25 20:08:47
【问题描述】:
我是德尔福的新手。我有一个 DLL,其中包含以下导出函数:
bool __stdcall MyFunction(char * name, int * index)
在 C++ 中调用这个 DLL 函数的代码完美运行:
typedef void (WINAPI * MyFunction_t)(char *, int *);
void main()
{
HMODULE mydll = LoadLibrary(L"C:\\mydll.dll");
MyFunction_t MyFunction = (MyFunction_t)GetProcAddress(mydll, "MyFunction");
int index = 0;
MyFunction("MyString", &index);
}
我需要在 Delphi 中做同样的事情。这是我的代码,它不起作用(调用了 MyFunction 但索引变量没有收到适当的值)。这是一个代码摘录,所以请忽略混乱。任何意见将不胜感激!
type
TMyFunction= function(name: PChar; var index_ptr: Integer): Boolean; stdcall;
var
fMyFunction : TMyFunction;
i : Integer;
h: THandle;
begin
Result := 0;
h := LoadLibrary('c:\\mydll.dll');
fMyFunction := GetProcAddress(h, 'MyFunction');
if @fMyFunction <> nil then
begin
fMyFunction('MyString', i);
Result := i;
end;
FreeLibrary(h);
end;
【问题讨论】:
-
你的 dll 是用什么语言构建的?
-
你的 C 代码调用了一个 'void' 函数,但 Delphi 代码调用了一个返回布尔值的函数...?
-
@Roddy 这是调用函数的 C 代码中的一个问题,但它似乎是良性的,因为这些代码都没有对返回值做任何事情