我如何从delphi dll函数返回pchar类型?

时间:2014-05-23 14:42:28

标签: delphi dll vb6 pchar

Vb6代码运行时出现以下错误。

如何修复错误?

如何返回普通字符串?

vb6代码

Private Declare Function DllPchar Lib "C:\TEST\Project2.dll" (ByVal AStr As String) As String 

Private Sub Command10_Click() 
  Dim tmp as String 
  tmp  = DllPchar("123"); 
End Sub 

Delphi7代码

function DllPchar( AStr: PChar) : PChar; stdcall; 

1 个答案:

答案 0 :(得分:3)

嗯,您没有提供有关此问题的更多信息。例如,错误消息。和“DllPChar”的Delphi代码。

但没关系。我注意到的第一件事是你的Declare Function语句返回一个String。这不起作用,因为VB期望返回BSTR类型的值。 Delphi的WideString类型与BSTR兼容。

这一点很重要的原因是因为VB字符串是内部UTF-16,即每个字符2个字节由COM内存管理器分配的Unicode字符串。 Delphi PAnsiChar类型是指向8位ANSI字符的指针,Delphi字符串由Delphi自己的内存管理器分配。它们是不相容的。但是,在VB6中有一个特殊情况,你可以使用Declare Function参数ByVal ... As String,VB在调用之前处理VB字符串和PAnsiChar 之间的自动转换, 之后,在PAnsiChar和VB字符串之间。

如果您不能在Delphi中使用BSTR,最好的办法是重写DllPchar(),以便修改AStr参数。或者,创建一个新参数以返回值。

如果您可以使用BSTR,则可以修改AStr以将其传递给ByRef而不是ByVal。这将允许您从VB传入Unicode字符串。然后通过返回值返回结果。