如何在我的C++程序中使用COM dll

Roe*_*oey 7 c++ com dll

我希望在我的C++库中使用COM dll.我想的方法是#import dll的.tlb文件,我做了:

#import "mycom.tlb" no_namespace
Run Code Online (Sandbox Code Playgroud)

问题是,我不太清楚在哪里发表这个声明.它应该在H文件或CPP文件中吗?或者stdafx.h文件?我尝试将它放在.cpp文件中,仅用于测试.

在H文件中我声明了这个成员:

ILogicSecuredPtr m_pbLogic;
Run Code Online (Sandbox Code Playgroud)

(其中ILogicSecured是我想在COM dll中使用的接口)

然后我在构造函数中添加了这个来实例化接口:

CoInitialize(NULL);
m_pbLogic(__uuidof(LogicSecured)); 
Run Code Online (Sandbox Code Playgroud)

(其中LogicSecured是实现接口的对象的名称)

在析构函数中我添加了:

CoUninitialize();
Run Code Online (Sandbox Code Playgroud)

但是,无论我在哪里尝试放置#import声明,都无法编译.它只是无法识别ILogicSecured对象.我在H文件中收到此错误:

Error   2   error C2146: syntax error : missing ';' before identifier 'm_pbLogic'
Run Code Online (Sandbox Code Playgroud)

我还应该提一下,当我在ILogicSecuredPtr声明的F12(在Visual Studio中)时,它会把我带到tlh文件就好了.所以我知道它认出来了.

我在这做错了什么?

非常感谢.Roey

sha*_*oth 3

问题是,当编译器解析 .h 文件时,它还没有看到#import。由于您的项目很小,您最好的选择就是#import投入stdafx.h.

当您按 F12 时,Visual Studio 使用 Intellisence 数据库信息,该信息是按可能与编译顺序不同的顺序解析所有源而形成的。因此,让 Intellisence 知道声明某些内容的位置并且让编译器同时不编译它是很典型的。

  • 调用 m_pbLogic.CreateInstance( __uuidof(LogicSecured) ) 而不是尝试调用 m_pbLogic(...) - 它将返回一个 HRESULT - 使用 FAILED() 宏检查它 - 如果调用失败相应地做出反应 - 抛出异常或其他内容。 (2认同)