我使用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)
AC# DLL 是托管程序集,不会通过经典 PE 导出来导出其功能。您的选择:
一旦您选择了这些选项之一,您将不得不处理string数据类型的滥用问题。这是一个私有的 Delphi 数据类型,对于互操作无效。对于问题中的简单例子PWideChar就足够了。