[英]IID linking error with Visual Studio 2013
尝试在VS2013中链接IID时遇到问题。
我到处搜索并尝试了建议的修复程序,但是它们似乎没有用。
在此之前,我从未做过COM,因此我可能只是在过程中缺少一步。
我试图在一个库中创建一个COM类,然后将其链接并由其他项目使用。
我要做的是创建此IDL文件:
[
uuid(626FCA47-CC2C-4604-9F46-223607BAB6C7), version(1.0), helpstring("XScriptingObjectClass")
]
library XScriptingObjectLib
{
[
uuid(268AE16D-7179-4569-9851-B86621346B4F), helpstring("Main interface for XScriptingObject")
]
interface IXScriptingObject : IDispatch
{
// functions removed so this post isn't 900 miles long.
};
[
uuid(AD9B5251-B699-4DF5-B5AA-1C626FABDC93),
helpstring("XScriptingObject Class")
]
coclass CXScriptingObject
{
[default] interface IXScriptingObject;
};
};
然后,对于已创建的接口,我有一个.h文件:
EXTERN_C const IID IID_IXScriptingObject;
MIDL_INTERFACE("268AE16D-7179-4569-9851-B86621346B4F")
IXScriptingObject : public IDispatch
{
}
我也有一个非接口类,它继承自该接口,并且按照我认为正确的方式进行设置:
#pragma once
#include "IXScriptingObject.h"
EXTERN_C const CLSID CLSID_CXScriptingObject;
EXTERN_C const IID IID_IXScriptingObject;
class ATL_NO_VTABLE CXScriptingObject :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<CXScriptingObject, &CLSID_CXScriptingObject>,
public IDispatchImpl<IXScriptingObject, &IID_IXScriptingObject>
{
public:
long m_lRefCount;
DECLARE_NOT_AGGREGATABLE(CXScriptingObject)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CXScriptingObject)
COM_INTERFACE_ENTRY(IXScriptingObject)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
//::ATL::CComPtr<IHTMLDocument2> m_spHtmlDoc;
};
一切将为此库构建。 除非我尝试使用CComObject创建该对象的实例,否则将消耗每个使用此库的项目。 这是当发生IID的链接器错误时。 链接器错误发生在其他尝试使用该库的项目中,即使实例化是在库代码本身中完成的。
我错过了一步,还是我要彻底解决这个问题? 我尝试了一种建议,其中包括从IDL文件生成的自动生成的.h / .c文件。 它似乎没有用。 使用该库的项目最终会抱怨,如果我这样做的话,已经在其他地方定义了IID。
我还尝试使用完整路径而不是相对路径显式链接库。 那里也没有骰子。
谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.