问题描述
我正在尝试从 Delphi 6 调用 .NET DLL。
使用 LoadLibrary()
动态加载 DLL 工作正常,并返回句柄。
Handle := LoadLibrary(PChar(DLLName));
但是,GetProcAddress()
函数返回 nil
,即使 Handle
有效,并且函数 'DLL_Version' 存在。
GetProcAddress(Handle,'DLL_Version');
DLL 代码贴在下面
[Guid("14fd1190-df04-488c-ab0f-b120ea3e3f3a")]
[ComVisible(true)]
public class UnManClass
{
[DllExport]
public static int DLL_Version()
{
return 251;
}
}
我使用了 UnmanagedExports nuget 包来支持 C# 中的 [DllExport]。
这是 DumpBin 输出:
解决方法
使用 Delphi 调用 .NET DLL,你可以这样尝试:
var
OBJ: Variant;
begin
try
OBJ := CreateOleObject('DLLName.UnManClass');
ShowMessage(IntToStr(OBJ.DLL_Version));
finally
OBJ := Unassigned;
end;
end