将 c++ COM 库移植到 linux [关闭]

问题描述 投票:0回答:0

我在 Windows 上有几个共享库。以及在这些库中作为 COM 对象导出的类,现在我需要将这些库移植到 linux。

如何在 linux 上构建它们并优雅地修改代码?以下是头文件的一部分。

EXTERN_C const IID IID_IYZD_Cap;

#if defined(__cplusplus) && !defined(CINTERFACE)

MIDL_INTERFACE("4DE71EE7-E235-4248-B5F0-F44000000064")
IYZD_Cap : public IUnknown
{
public:
    virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetCap( 
        /* [in] */ BSTR bsSection,
        /* [in] */ BSTR bsKeyword,
        /* [out] */ IUnknown **ppEnumFields) = 0;
    
    
};

#else /* C 风格的接口 */

typedef struct IYZD_CapVtbl
{
    BEGIN_INTERFACE
    
    HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
        IYZD_Cap * This,
        /* [in] */ REFIID riid,
        /* [annotation][iid_is][out] */ 
        _COM_Outptr_  void **ppvObject);
    
    ULONG ( STDMETHODCALLTYPE *AddRef )( 
        IYZD_Cap * This);
    
    ULONG ( STDMETHODCALLTYPE *Release )( 
        IYZD_Cap * This);
    
    /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetCap )( 
        IYZD_Cap * This,
        /* [in] */ BSTR bsSection,
        /* [in] */ BSTR bsKeyword,
        /* [out] */ IUnknown **ppEnumFields);
    
    END_INTERFACE
} IYZD_CapVtbl;

interface IYZD_Cap
{
    CONST_VTBL struct IYZD_CapVtbl *lpVtbl;
};

#ifdef COBJMACROS

#define IYZD_Cap_QueryInterface(这个,riid,ppvObject)
( ((This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )

#define IYZD_Cap_AddRef(这个)
( ( (This)->lpVtbl -> AddRef(This) )

#define IYZD_Cap_Release(这个)
( (This)->lpVtbl -> Release(This) )

#define IYZD_Cap_GetCap(本、bsSection、bsKeyword、ppEnumFields)
( (This)->lpVtbl -> GetCap(This,bsSection,bsKeyword,ppEnumFields))

#endif /* COBJMACROS */

#endif /* C 风格接口 */ #endif /c++/

c++ linux com
© www.soinside.com 2019 - 2024. All rights reserved.