IID链接错误与Visual Studio 2013

时间:2014-12-15 21:25:51

标签: c++ visual-studio-2013 com

我在尝试链接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已在其他地方定义,如果我这样做..

我还尝试使用完整路径而不是相对路径显式链接库。也没有骰子。

感谢。

0 个答案:

没有答案