【发布时间】:2010-10-11 00:03:10
【问题描述】:
如何将 char * 从 C dll 传递到 VB
这里是示例代码:
void Cfunc(char *buffer,int len)
{
BSTR buf_bstr = SysAllocString((BSTR)buffer);
VBptr.VBfunc(buf_bstr,len);
}
这个功能不起作用,实际上一些其他值被发送到VB而不是实际值。
有人可以提出解决方案吗?
【问题讨论】:
-
你能举一个原始字符串与发送的错误值的例子吗?
-
您的(原始)问题似乎是字符宽度。 BSTR 始终是宽字符(COM 都是 Unicode)。强制转换不会自动加宽字符,而是将字节解释为 wchar_t*。
-
此伪代码存在内存泄漏。您调用 SysAllocString(),但在不再需要字符串后不要释放它。
-
对于它的价值,一个非常好的经验法则是,如果你必须强制转换某些东西才能使其工作 - 就像在这里你将 char* 缓冲区强制转换为 BSTR 的情况一样 - 那么你'可能做错了,应该寻找其他转换。演员表的合法使用往往相当少见,因此对演员表持怀疑态度是个好主意。