簡體   English   中英

如何在COM庫中定義此結構?

[英]How can I define this struct in my COM library?

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

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;
    };
};

當我嘗試編譯它時,出現以下錯誤:

錯誤MIDL2312非法語法,除非使用mktyplib兼容模式:CerberusErrorDetails CerberusNative CerberusNative.idl 32

難道我做錯了什么? 這是什么mktyplib錯誤? 為什么要這樣呢?

語法錯誤。 正確方法:

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

該錯誤似乎是:

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

請注意,您似乎正在嘗試的操作可能應該考慮使用ISupportErrorInfo / IErrorInfo ,這是報告錯誤編號和消息的標准方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM