C# GetProcAddress()为.NET DLL返回Nil
我正在尝试从Delphi 6调用.NET DLL 使用C# GetProcAddress()为.NET DLL返回Nil,c#,.net,delphi,com,delphi-6,C#,.net,Delphi,Com,Delphi 6,我正在尝试从Delphi 6调用.NET DLL 使用LoadLibrary()动态加载DLL工作正常,并返回句柄 Handle:=LoadLibrary(PChar(DLLName)); 但是,GetProcAddress()函数返回nil,即使Handle有效,并且函数“DLL\u Version”存在 GetProcAddress(句柄'DLL_Version'); DLL代码发布在下面 [Guid(“14fd1190-df04-488c-ab0f-b120ea3e3f3a”)] [C
LoadLibrary()
动态加载DLL工作正常,并返回句柄
Handle:=LoadLibrary(PChar(DLLName));
但是,GetProcAddress()
函数返回nil
,即使Handle
有效,并且函数“DLL\u Version”存在
GetProcAddress(句柄'DLL_Version');
DLL代码发布在下面
[Guid(“14fd1190-df04-488c-ab0f-b120ea3e3f3a”)]
[ComVisible(true)]
公共类未命名类
{
[DllExport]
公共静态整数DLL_版本()
{
返回251;
}
}
我使用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
您如何知道DLL导出了
DLL\u Version
函数?当GetProcAddress()
失败时,请使用GetLastError()
找出原因。但最常见的原因是请求的函数不存在。再次检查,如使用类似的工具。确保函数确实已导出,并且使用您期望的准确拼写导出。实现和导出函数的.NET代码是什么样子的?可能需要从C#例程中删除static
关键字。@R.Hoek不,请查看。在LoadLibrary中,使用DLL的完整路径以确保加载了正确的DLL。确保LoadLibrary不返回0。