【发布时间】:2011-05-23 01:40:10
【问题描述】:
非托管函数的 VB 签名应该是什么 void PopulateBSTR(BSTR outstring)?
函数 PopulateBSTR 执行 SysAllocString 并填充字符串。请注意,未管理的签名具有参数 BSTR 而不是 BSTR*。当 C++ 签名以 BSTR* 作为参数时,我可以使用 IntPtr 签名来编组 BSTR 字符串。
(非托管代码是我无法修改但需要使用的外部 dll。)
【问题讨论】:
-
不存在通过传递的 BSTR 参数(而不是 BSTR*)返回字符串有效的情况。尽管完全不清楚那架飞机是如何在没有变成火球的情况下降落的,但这段遗留代码只能在偶然情况下起作用。你没有那种运气了。
-
@Hans 是完全正确的。你需要回归基础,弄清楚到底发生了什么。