Т.к. чувствую себя неопытным в плане перевода описания COM-интерфейса из Delphi в C++, то задаю вопрос в данном разделе форума. В общем на Delphi выглядит так: Код (Text): unit DMPluginIntf; //описание см. в readme.txt interface type { IDMInterface } IDMInterface = interface(IUnknown) ['{B412B405-0578-4B99-BB06-368CDA0B2F8C}'] function DoAction(action: WideString; parameters: WideString): WideString; stdcall;//выполнить какие-либо действия в ДМ end; { IDMPlugIn } IDMPlugIn = interface(IUnknown) ['{959CD0D3-83FD-40F7-A75A-E5C6500B58DF}'] function getID: WideString; stdcall; //-----info function GetName: WideString; stdcall;//получаем инфу о плагине function GetVersion: WideString; stdcall;//получаем инфу о плагине function GetDescription(language: WideString): WideString; stdcall;//получаем инфу о плагине function GetEmail: WideString; stdcall;//получаем инфу о плагине function GetHomepage: WideString; stdcall;//получаем инфу о плагине function GetCopyright: WideString; stdcall;//получаем инфу о плагине function GetMinAppVersion: WideString; stdcall;//получаем минимальную версию ДМ-а с которой может работать плагин //------ procedure PluginInit(_IDmInterface: IDmInterface); stdcall;//инициализация плагина и передача интерфейса для доступа к ДМ procedure PluginConfigure(params: WideString); stdcall;//вызов окна конфигурации плагина procedure BeforeUnload; stdcall; function EventRaised(eventType: WideString; eventData: WideString): WideString; stdcall;//вызывается из ДМ-ма при возникновении какого либо события { идентификатор плагина } property ID: WideString read getID; end; implementation end. Я преобразовал это дело в: Код (Text): // {B412B405-0578-4B99-BB06-368CDA0B2F8C} DEFINE_GUID( IID_IDMInterface, 0xb412b405, 0x0578, 0x4b99, 0xbb, 0x06, 0x36, 0x8c, 0xda, 0x0b, 0x2f, 0x8c); class IDMInterface: public IUnknown { public: virtual WCHAR * __stdcall DoAction(WCHAR* action, WCHAR* parameters); }; // {959CD0D3-83FD-40F7-A75A-E5C6500B58DF} DEFINE_GUID( IID_IDMPlugIn, 0x959cd0d3, 0x83fd, 0x40f7, 0xa7, 0x5a, 0xe5, 0xc6, 0x50, 0x0b, 0x58, 0xdf); class IDMPlugIn: public IUnknown { public: virtual WCHAR * __stdcall getID(void); virtual WCHAR * __stdcall GetName(void); virtual WCHAR * __stdcall GetVersion(void) virtual WCHAR * __stdcall GetDescription(WCHAR* language) virtual WCHAR * __stdcall GetEmail(void); virtual WCHAR * __stdcall GetHomepage(void); virtual WCHAR * __stdcall GetCopyright(void); virtual WCHAR * __stdcall GetMinAppVersion(void); virtual void __stdcall PluginInit(IDMPlugIn* _IDMPlugIn); virtual void __stdcall PluginConfigure(WCHAR* params); virtual void __stdcall BeforeUnload(void); virtual WCHAR * __stdcall EventRaised(WCHAR* eventType, WCHAR* eventData); WCHAR* ID = getID(); }; Так вот правильно ли я это сделал?
WideString afair это собственный паскалевский тип данных. и че-то я не вижу ассоциации интерфейса и GUID'a. вообще не пробовал у них на форуме поискать?
не знал про WideString (думал эт тож самое, что и WCHAR или на крайний случай UNICODE_STRING )) По дельфийскому сорсу связи не вижу. На форуме у них все на Delphi.
работа с widestring в делфях сводится к OLEAUT32.dll (SysReAllocStringLen etc.). лучше всего откомпилить на делфях тестовый пример и посмотреть в отладчике как оно работает со строками, по любому полезно будет