繁体   English   中英

IID链接错误与Visual Studio 2013

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM