Как я могу определить эту структуру в моей библиотеке COM?

Я создал новый проект ATL в Visual Studio 2015. Я добавил новый простой объект ATL, внутри библиотеки я пытаюсь определить struct чтобы я мог пройти это struct вокруг в моей реализации COM. Вот мой 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 ошибка? Почему он просит об этом?

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 который является стандартным способом сообщения номеров ошибок и сообщений.

0