use*_*263 3 .net vb.net delphi pinvoke
我已经搜索了很多关于这个问题,并且没有关于如何将字符串从delphi dll传递给.NET的明确答案下一代码基于msdn帮助文件:http://msdn.microsoft.com/en-us/库/ 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
Run Code Online (Sandbox Code Playgroud)
调用myDelphiFunc时,我在"buffer"变量中收到一个空字符串.我究竟做错了什么?
提前致谢
Dav*_*nan 10
你的代码有很多问题.主要缺点是:
但是,我不确定是否值得尝试深入理解它.最简单的方法是使用在共享COM堆上分配的BSTR.这使得该函数更易于使用并隐藏了所有内存分配的复杂性.
德尔福
procedure TestFunc(out str: WideString); stdcall;
begin
str := 'foo';
end;
Run Code Online (Sandbox Code Playgroud)
VB
<DllImport(path)> _
Public Sub TestFunc(<MarshalAs(UnmanagedType.BStr)> ByRef str As String)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2051 次 |
| 最近记录: |