Delphi做DLL供其他程序调用:PCHAR作返回类型经常出有关问题!各位DX帮小弟我看看
Delphi做DLL供其他程序调用:PCHAR作返回类型经常出问题!!各位DX帮我看看~
我这有个Delphi的DLL,有个输出函数是PCHAR型的返回参数,在VB里用String来接收就为空,换用Long接收到一个长整形,后来被我猜中是字符串在进程内存中的地址,然后调用API ReadMemory搞定。
换用C#.NET VB.NET 均无法调用成功,无论string StringBuilder char[] byte[] IntPtr,参数如何ref,如何unsafe,都返回空,真是伤脑筋。没办法改那个DLL,所以请各位DX帮忙支个招,万谢!
------解决方案--------------------
C#不是可以声明指针吗? char*
------解决方案--------------------
一般不使用PChar类型,而是使用字符数组。
PChar指向的内存中的长度不是固定的,不同的语言会。。
使用字符数组一定正确。
------解决方案--------------------
主动分配PChar指向的空间,或者由调用者申请空间。
------解决方案--------------------
Delphi中的PChar, 相当于VC中的LPTSTR,这也是Windows API中非常常见的一种类型。
如果在VB中调用,可以直接申明成String类型,只是在调用前需要先分配存储空间。
例如:
Private Declare Sub MyFunc Lib "DLLFile " (ByVal lpString As String)
Private Sub Form_Activate()
Dim MyStr As String
MyStr = String(1024, VbNullChar)
MyFunc MyStr
MsgBox MyStr
End Sub
我这有个Delphi的DLL,有个输出函数是PCHAR型的返回参数,在VB里用String来接收就为空,换用Long接收到一个长整形,后来被我猜中是字符串在进程内存中的地址,然后调用API ReadMemory搞定。
换用C#.NET VB.NET 均无法调用成功,无论string StringBuilder char[] byte[] IntPtr,参数如何ref,如何unsafe,都返回空,真是伤脑筋。没办法改那个DLL,所以请各位DX帮忙支个招,万谢!
------解决方案--------------------
C#不是可以声明指针吗? char*
------解决方案--------------------
一般不使用PChar类型,而是使用字符数组。
PChar指向的内存中的长度不是固定的,不同的语言会。。
使用字符数组一定正确。
------解决方案--------------------
主动分配PChar指向的空间,或者由调用者申请空间。
------解决方案--------------------
Delphi中的PChar, 相当于VC中的LPTSTR,这也是Windows API中非常常见的一种类型。
如果在VB中调用,可以直接申明成String类型,只是在调用前需要先分配存储空间。
例如:
Private Declare Sub MyFunc Lib "DLLFile " (ByVal lpString As String)
Private Sub Form_Activate()
Dim MyStr As String
MyStr = String(1024, VbNullChar)
MyFunc MyStr
MsgBox MyStr
End Sub