由于 aBSTR
只是 atypedef
对于wchar_t*
我们的代码库有几个(很多?)地方,其中字符串文字被传递给期望 a 的方法,BSTR
这可能会混淆编组器或任何试图使用任何BSTR
特定方法的人(例如SysStringLen
)。
有没有办法静态检测这种类型的滥用?
我尝试使用 VC10/Wall
和静态代码分析Microsoft All Rules进行编译,但以下有问题的代码没有被它们中的任何一个标记。
void foo(BSTR str)
{
std::cout << SysStringLen(str) << std::endl;
}
int _tmain()
{
foo(L"Don't do that");
}
更新:在试图破坏wtypes.h
以检测这些类型的违规行为后,我已经放弃了。
我尝试了两条路径,这两条路径都可以使用上面的示例程序,但是一旦我尝试了一个真正的项目,它们就失败了。
- 创建一个名为的类
BSTR
,但由于 aVARIANT
有 aBSTR
作为联合成员,因此新类不能有任何构造函数或赋值运算符,这破坏了每个地方都NULL
被视为 aBSTR
。我尝试用NULL
具有转换运算符的类型替换,但在添加了数十个新运算符(比较、转换等)后,我开始遇到模棱两可的调用并放弃了。 - 然后我尝试了@CashCow 和@Hans 建议的方式(制作
BSTR
另typedef
一种类型的指针)。这也不起作用,在添加toBSTR
和fromBSTR
方法并乱扔comutil.h (_bstr_t
) 和其他带有转换的地方之后,我终于到了编译器在 IDL 生成的头文件中窒息的地步(默认值被转换为文字宽字符串)。
简而言之,我已经放弃尝试自己实现这一目标,如果有人知道可以帮助我的代码分析工具,我会很高兴听到它。