如何在C#中创建DLL并在Delphi XE6中调用

我使用File / New Project / Class Library在VS2013中创建了一个DLL。 然后我尝试在Delphi中动态加载它。 但Delphiis为程序GetProcAddress返回NIL

我的C#和Delphi代码看起来就像我在下面发布的那样。 在代码中, GetProcAddress返回NIL 。 请告知我是否遗漏了什么。

C#代码

 using System; namespace TestDLL { public class Class1 { public static string EchoString(string eString) { return eString; } } } 

delphi代码

  Type TEchoString = function (eString:string) : integer;stdcall; function TForm1.EchoString(eString:string):integer; begin dllHandle := LoadLibrary('TestDLL.dll') ; if dllHandle  0 then begin @EchoString := GetProcAddress(dllHandle, 'EchoString') ; if Assigned (EchoString) then EchoString(eString) //call the function else result := 0; FreeLibrary(dllHandle) ; end else begin ShowMessage('dll not found ') ; end; end; 

AC#DLL是托管程序集,不通过经典PE导出导出其function。 你的选择:

  1. 使用C ++ / CLI混合模式包装C#。 然后,您可以按常规方式以非托管模式导出函数。
  2. 使用Robert Giesecke的UnmanagedExports 。 这可能比C ++ / CLI包装器更方便。
  3. 将托管function公开为COM对象。

一旦你选择其中一个选项,就必须处理滥用string数据类型的问题。 这是一个私有的Delphi数据类型,对于互操作无效。 对于问题中的简单示例, PWideChar就足够了。