我希望在我的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
问题是,当编译器解析 .h 文件时,它还没有看到#import。由于您的项目很小,您最好的选择就是#import投入stdafx.h.
当您按 F12 时,Visual Studio 使用 Intellisence 数据库信息,该信息是按可能与编译顺序不同的顺序解析所有源而形成的。因此,让 Intellisence 知道声明某些内容的位置并且让编译器同时不编译它是很典型的。