我在尝试链接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的链接器错误发生时。链接器错误发生在尝试使用此库的OTHER项目中,即使实例化是在库代码本身中完成的。
我错过了一步,还是我完全错了?我尝试了一个包含从IDL文件生成的自动生成的.h / .c文件的建议。它似乎没有用。使用此库的项目最终抱怨IID已在其他地方定义,如果我这样做..
我还尝试使用完整路径而不是相对路径显式链接库。也没有骰子。
感谢。