2017-03-23 52 views
0

我在Visual Studio 2015中創建了一個新的ATL項目。我在庫中添加了一個新的簡單ATL對象,我試圖定義一個struct,這樣我可以在我的COM實現中傳遞這個struct。這裏是我的CerberusNative.idl定義,添加CerberusErrorDetails結構:如何在我的COM庫中定義這個結構?

import "oaidl.idl"; 
import "ocidl.idl"; 

[ 
    object, 
    uuid(B98A7D3F-651A-49BE-9744-2B1D8C896E9E), 
    dual, 
    nonextensible, 
    pointer_default(unique) 
] 
interface ICerberusSession : IDispatch{ 
}; 
[ 
    uuid(8F2227F9-10A9-4114-A683-3CBEB02BD6DA), 
    version(1.0), 
] 
library CerberusNativeLib 
{ 
    [ 
     uuid(527568A1-36A8-467A-82F5-228F7C3AC926) 
    ] 
    typedef struct CerberusErrorDetails 
    { 
     INT ErrorCode; 
     BSTR ErrorMessage; 
    }; 
    importlib("stdole2.tlb"); 
    [ 
     uuid(CAB8A88E-CE0E-4B4C-B656-C52A7C8A5B18)  
    ] 
    coclass CerberusSession 
    { 
     [default] interface ICerberusSession; 
    }; 
}; 

當我嘗試編譯它,我得到以下錯誤:

Error MIDL2312 illegal syntax unless using mktyplib compatibility mode : CerberusErrorDetails CerberusNative CerberusNative.idl 32

難道我做錯了什麼?這是什麼mktyplib錯誤?它爲什麼要求它?

+0

您已經聲明瞭'結構CerberusErrorDetails'的類型定義,但沒有給它一個名字。 – Ben

回答

0

語法錯誤。正確的方法:

typedef 
     [ 
      uuid(527568A1-36A8-467A-82F5-228F7C3AC926), 
      version(1.0) 
     ] 
    struct CerberusErrorDetails { 
     INT ErrorCode; 
     BSTR ErrorMessage; 
    } CerberusErrorDetails; 
0

的錯誤似乎是:

[ 
    uuid(527568A1-36A8-467A-82F5-228F7C3AC926) 
] 
typedef struct tagCerberusErrorDetails 
{ 
    INT ErrorCode; 
    BSTR ErrorMessage; 
} CerberusErrorDetails; /// <- You forgot this 

注意,你看起來是可以嘗試你或許應該考慮使用ISupportErrorInfo/IErrorInfo這是報告的錯誤號碼與信息的標準方式。

相關問題