如何在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。 你的选择:
- 使用C ++ / CLI混合模式包装C#。 然后,您可以按常规方式以非托管模式导出函数。
- 使用Robert Giesecke的UnmanagedExports 。 这可能比C ++ / CLI包装器更方便。
- 将托管function公开为COM对象。
一旦你选择其中一个选项,就必须处理滥用string
数据类型的问题。 这是一个私有的Delphi数据类型,对于互操作无效。 对于问题中的简单示例, PWideChar
就足够了。