2017-03-23 2 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'のtypedefを宣言したが、それに名前を与えられていません。 – 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を使用することを検討すべきであるということ。

関連する問題