GetProcAddress() 为 .NET DLL 返回 Nil

问题描述

我正在尝试从 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 输出

image

有什么办法可以解决这个问题,或者有其他可行的方法吗?

解决方法

使用 Delphi 调用 .NET DLL,你可以这样尝试:

var 
  OBJ: Variant;
begin 
   try 
      OBJ := CreateOleObject('DLLName.UnManClass');
      ShowMessage(IntToStr(OBJ.DLL_Version));
   finally
      OBJ := Unassigned;
   end;
end