我正在VS2013中编写一个使用COM DLL库的Win32 C ++控制台应用程序。我添加了文件:
到我的项目。
最初我开始在一个文件中工作,代码如下:
Main.cpp的
#include "COMObject_i.h"
#include "COMObject_i.c"
int _tmain(int argc, _TCHAR* argv[])
{
// Setup and use COM object interface...
}
这段代码运行正常,我能够构造COM对象接口并在其上调用方法。 但是现在我正在向前移动,我想将COM对象接口设置移动到另一个类。在尝试这样做时,我得到这样的代码:
COMObjectWrapper.h
#pragma once
#include "COMObject_i.h"
#include "COMObject_i.c"
class COMObjectWrapper
{
// Class declaration
}
COMObjectWrapper.cpp
#include "COMObjectWrapper.h"
// Class method definitions
Main.cpp的
#include "COMObjectWrapper.h"
int _tmain(int argc, _TCHAR* argv[])
{
// Use COM object wrapper
}
这不会编译,并给我几个链接器错误,如下所示:
error LNK2005: _CLSID_COMObjectInterface already defined in COMObjectWrapper.obj
error LNK2005: _IID_ICOMObjectInterface already defined in COMObjectWrapper.obj
error LNK2005: _LIBID_ICOMObjectLib already defined in COMObjectWrapper.obj
我已经尝试将Main.cpp中的#include移动到Main.h并且没有帮助。我已经尝试查看COMObject_i文件,我发现了不止一次定义的各种内容,但由于文件是自动生成的,我不知道如何解决这个问题?
答案 0 :(得分:1)
不要这样做:
#include "COMObject_i.c"
而是将COMObject_i.c
作为文件添加到项目中。
.c
或.cpp
文件应单独编译,而不是#include
d。特别是,C文件不应该包含在C ++文件中!
可能"工作"在这种情况下,仅仅从main.cpp
包含它,但这样的风格很差。