2012-02-08 32 views
1

今天我必须在本地C++项目中定义WIN32_MEAN_AND_LEAN预处理器宏,因为我决定在其中使用boost::asio,如果没有这个宏,就会出现构建错误。从非COM静态库中移除对OleInitialize的调用是否安全?

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

在这种情况下,移除呼叫是否安全?该项目使用了Win32串口函数和boost :: asio(逐渐地,我将离开boost :: asio)。我担心OleInitialize对于某些Win32调用可能是必需的。

这是所有与它做:

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

最简单的解决方案是将原型从MSDN复制/粘贴到您自己的头文件中并继续调用函数。 – 2012-02-08 20:27:22

回答

2

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

如果不调用任何COM方法(任何CoXXX()功能),你不调用任何OLE方法(OleXXX()功能),那么你应该,如果你删除它被罚款。

您应该快速搜索COM/OLE函数的代码库,并确保您不再使用这些技术。然后你可以做一个你不这样做的测试,并测试它是否仍然有效(你有一套测试用例,对吧?)。

看看Docs其他可能会破坏的东西,你应该检查。

+0

+1:看起来这个调用是最后一个,去年我们通过looooong重构从COM移植到C++/CLI。我们确实有一些自动化的单元和集成测试,但覆盖率仍然很低。这次我会碰碰运气。 – 2012-02-08 18:27:09

+0

除了调用'CoInitialize()'外,'OleInitialize()'还有什么作用?我接管了既有的代码,删除了对OleInitialize()的调用,而且事情继续良好 - 会感谢你的洞察力;谢谢。 – Sabuncu 2015-12-07 21:55:58

相关问题