从非COM静态库中删除对OleInitialize的调用是否安全?

时间:2012-02-08 18:06:17

标签: c++ windows com ole legacy-code

今天我必须在本机C ++项目中定义WIN32_MEAN_AND_LEAN预处理器宏,因为我决定在其中使用boost::asio,如果没有该宏,我会遇到构建错误。

事情是,我现在得到的错误是OleInitialize: identifier not found。根据{{​​3}},此函数用于初始化COM库。我的项目现在不是一个COM库,但我的合作伙伴说它曾经是。

在这种情况下,取消通话是否安全?该项目使用Win32串口功能和boost :: asio的混合(逐渐地,我将只留下boost :: asio)。我担心的是某些Win32调用可能需要OleInitialize。

这就是用它做的全部:

HRESULT hOle = OleInitialize( 0 );
if( !SUCCEEDED( hOle ) )
    throw "Could not initialize OLE";

1 个答案:

答案 0 :(得分:2)

最糟糕的情况是COM方法可能会失败,如果你还在调用一些。 OleInitialize()在内部调用CoInitialize()。只有那些功能需要这个。基本的Win32函数(CreateWindow,CreateFile等)不需要这个初始化。

如果你没有调用任何COM方法(任何CoXXX()函数)并且你没有调用任何Ole方法(OleXXX()函数),那么如果你删除它应该没问题

您应该快速搜索COM / OLE函数的代码库,并确保您不再使用这些技术。然后,您可以在不执行此操作的情况下进行构建并测试它以查看它是否仍然有效(您有一套测试用例,对吧?)。

请查看Docs以了解您应该检查的其他可能破坏的内容。