我已经搜索了很多关于这个问题的内容,并且没有关于如何将字符串从delphi dll传递给.NET的明确答案 下一个代码基于msdn帮助文件:http://msdn.microsoft.com/en-us/library/4zey12w5.aspx
//Delphi code
function myDelphiFunc(var Buffer: PChar): Integer; export; stdcall;
Buffer:='this is a test';
Return:=0;
end;
//vb.NET code
<DllImport(path)> _
Public Function myDelphiFunc(ByVal buffer As String) As Integer
Public Sub myNETFunc()
Dim buffer_size As integer = 25
Dim buffer As String = New String(CChar(" "), buffer_size )
Call myDelphiFunc(buffer)
MsgBox(Strings.Left(buffer, InStr(buffer, Chr(0)) - 1))
End Sub
调用myDelphiFunc时,我在“buffer”变量中收到一个空字符串。我做错了什么?
提前致谢
答案 0 :(得分:10)
你的代码有很多问题。主要缺点是:
但是,我不确定是否值得尝试深入理解它。最简单的方法是使用在共享COM堆上分配的BSTR。这使得该函数更易于使用,并隐藏了所有内存分配的复杂性。
<强>的Delphi 强>
procedure TestFunc(out str: WideString); stdcall;
begin
str := 'foo';
end;
<强> VB 强>
<DllImport(path)> _
Public Sub TestFunc(<MarshalAs(UnmanagedType.BStr)> ByRef str As String)
答案 1 :(得分:0)
您的代码应替换为
function myDelphiFunc(var Buffer: PChar): Integer; export; stdcall;
const
tmp = 'this is a test';
begin
Buffer := StrAlloc(Lenght(tmp)+1);
StrPCopy(Buffer, PChar(tmp));
Return:=0;
end;