Начал осваивать СОМ, сделал компанент (VC++ 6, ATL)... но при попытке воспользоваться этим компонентом из VB он ругается, что тип данных с ним не совместимый. Какие типы данных можно юзать в интерфейсах, чтобы все было ок. Плиз помогите в освоении этого нелегкого дела.
Зарнее благодарен.
ЗЫ: О вот как интерфейс описан..
interface IXDBMComp : IDispatch
{
[id(1), helpstring("...")] HRESULT Connect(int port, DWORD baud);
[id(2), helpstring("...")] HRESULT Func03h( [in] BYTE devID, [in] WORD adr, [in] WORD size, [in] WORD* buff );
[id(3), helpstring("...")] HRESULT Func06h( [in] BYTE devID, [in] WORD adr, [in] WORD data );
[id(4), helpstring("...")] HRESULT Func10h( [in] BYTE devID, [in] WORD adr, [in] WORD size, [in] WORD* buff );
};
Здравствуйте, Аноним, Вы писали:
А>Начал осваивать СОМ, сделал компанент (VC++ 6, ATL)... но при попытке воспользоваться этим компонентом из VB он ругается, что тип данных с ним не совместимый. Какие типы данных можно юзать в интерфейсах, чтобы все было ок. Плиз помогите в освоении этого нелегкого дела. А>Зарнее благодарен. А>ЗЫ: О вот как интерфейс описан.. А>
А>interface IXDBMComp : IDispatch
А>{
А> [id(1), helpstring("...")] HRESULT Connect(int port, DWORD baud);
А> [id(2), helpstring("...")] HRESULT Func03h( [in] BYTE devID, [in] WORD adr, [in] WORD size, [in] WORD* buff );
А> [id(3), helpstring("...")] HRESULT Func06h( [in] BYTE devID, [in] WORD adr, [in] WORD data );
А> [id(4), helpstring("...")] HRESULT Func10h( [in] BYTE devID, [in] WORD adr, [in] WORD size, [in] WORD* buff );
А>};
А>
С целыми ты, наверное, разберёшься методом перебора (имхо — LONG, SHORT, BYTE, могу ошибаться), а вот массив нужен SAFEARRAY. Да, и поставь интерфейсу атрибут oleautomation, тогда, вроде, c неправильными тапами компилиться не будет.
Здравствуйте, Аноним, Вы писали:
А>Начал осваивать СОМ, сделал компанент (VC++ 6, ATL)... но при попытке воспользоваться этим компонентом из VB он ругается, что тип данных с ним не совместимый. Какие типы данных можно юзать в интерфейсах, чтобы все было ок. Плиз помогите в освоении этого нелегкого дела.
Поставь интерфейсу атрибут "oleatomation" и тебе компилятор midl сам скажет, если какие-нибудь типы несовместимы
VB понимает: BSTR, long, VARIANT, указатели на интерфейсы (в принципе даже IUnknown подходит), SAFEARRAY, enum'ы и UDT (user defined types).
Здравствуйте, Odi$$ey, Вы писали:
OE>Здравствуйте, Аноним, Вы писали:
А>Какие типы данных можно юзать в интерфейсах, чтобы все было ок. Плиз помогите в освоении этого нелегкого дела.
OE>http://www.rsdn.ru/article/?com/COMvs.xml