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;
答案 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字符串。然后通过返回值返回结果。