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

ary*_*ary 6 c# delphi

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

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

C#代码

using System;
namespace TestDLL
{
    public class Class1
    {
        public static string EchoString(string eString)
        {
            return eString;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

德尔福代码

 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;
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 4

AC# DLL 是托管程序集,不会通过经典 PE 导出来导出其功能。您的选择:

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

一旦您选择了这些选项之一,您将不得不处理string数据类型的滥用问题。这是一个私有的 Delphi 数据类型,对于互操作无效。对于问题中的简单例子PWideChar就足够了。