String 在vb6中,如何从C dll检索char*参数?

String 在vb6中,如何从C dll检索char*参数?,string,dll,vb6,function-calls,String,Dll,Vb6,Function Calls,我正在从VB6应用程序调用C dll。dll有一个函数调用签名,如下所示 void WINAPI geterrstr(char* foo); 其中foo是必须返回的字符串 在我的VB6应用程序中,我尝试使用以下语法调用我的dll,但它返回一个空字符串 Declare Sub geterrstr Lib "technopnp.dll" (ByRef lpbuffer As String) 有什么想法吗?你应该能够 Declare Sub geterrstr Lib "technopnp.dll

我正在从VB6应用程序调用C dll。dll有一个函数调用签名,如下所示

void WINAPI geterrstr(char* foo);
其中foo是必须返回的字符串

在我的VB6应用程序中,我尝试使用以下语法调用我的dll,但它返回一个空字符串

Declare Sub geterrstr Lib "technopnp.dll" (ByRef lpbuffer As String)
有什么想法吗?

你应该能够

Declare Sub geterrstr Lib "technopnp.dll" (ByVal lpbuffer As String)
...
dim buff as string
buff=string$(n, vbnullchar)
geterrstr buff

//read upto 1st vbnullchar
buff = left$(buff, instr(1, buff, vbnullchar) - 1)
if (buff="") then
  //no data
else
  msgbox buff
end if

n
需要一个合适的缓冲区大小,太短会导致崩溃。

此声明意味着ANSI转换。如果数据是Unicode,则使用ByVal lpbuffer作为Long,并传递strprtr(buff)。不幸的是,在原始的C dll中有一个空终止符,它后面有几个方形字符。我怎样才能去掉它们呢?它们是在VB缓冲区字符串中分配的空字符&没有被dll覆盖,上面的例子更新了如何去除它们。非常感谢。这真的很有帮助。