Плагин для Download Master'а

Тема в разделе "WASM.BEGINNERS", создана пользователем Stub, 19 фев 2008.

  1. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    Т.к. чувствую себя неопытным в плане перевода описания COM-интерфейса из Delphi в C++, то задаю вопрос в данном разделе форума.
    В общем на Delphi выглядит так:
    Код (Text):
    1. unit DMPluginIntf;
    2. //описание см. в readme.txt
    3. interface
    4.  
    5. type
    6.   { IDMInterface }
    7.   IDMInterface = interface(IUnknown)
    8.   ['{B412B405-0578-4B99-BB06-368CDA0B2F8C}']
    9.     function DoAction(action: WideString; parameters: WideString): WideString; stdcall;//выполнить какие-либо действия в ДМ
    10.   end;
    11.  
    12.   { IDMPlugIn }
    13.   IDMPlugIn = interface(IUnknown)
    14.   ['{959CD0D3-83FD-40F7-A75A-E5C6500B58DF}']
    15.     function getID: WideString; stdcall;
    16.     //-----info
    17.     function GetName: WideString; stdcall;//получаем инфу о плагине
    18.     function GetVersion: WideString; stdcall;//получаем инфу о плагине
    19.     function GetDescription(language: WideString): WideString; stdcall;//получаем инфу о плагине
    20.     function GetEmail: WideString; stdcall;//получаем инфу о плагине
    21.     function GetHomepage: WideString; stdcall;//получаем инфу о плагине
    22.     function GetCopyright: WideString; stdcall;//получаем инфу о плагине
    23.     function GetMinAppVersion: WideString; stdcall;//получаем минимальную версию ДМ-а с которой может работать плагин
    24.     //------
    25.     procedure PluginInit(_IDmInterface: IDmInterface); stdcall;//инициализация плагина и передача интерфейса для доступа к ДМ
    26.     procedure PluginConfigure(params: WideString); stdcall;//вызов окна конфигурации плагина
    27.     procedure BeforeUnload; stdcall;
    28.  
    29.     function EventRaised(eventType: WideString; eventData: WideString): WideString; stdcall;//вызывается из ДМ-ма при возникновении какого либо события
    30.     { идентификатор плагина }
    31.     property ID: WideString read getID;
    32.   end;
    33.  
    34. implementation
    35.  
    36. end.
    Я преобразовал это дело в:
    Код (Text):
    1. // {B412B405-0578-4B99-BB06-368CDA0B2F8C}
    2. DEFINE_GUID( IID_IDMInterface,
    3.              0xb412b405, 0x0578, 0x4b99, 0xbb, 0x06, 0x36, 0x8c, 0xda, 0x0b, 0x2f, 0x8c);
    4. class   IDMInterface: public IUnknown
    5. {
    6. public:
    7.     virtual WCHAR * __stdcall DoAction(WCHAR* action, WCHAR* parameters);
    8. };
    9.  
    10.  
    11. // {959CD0D3-83FD-40F7-A75A-E5C6500B58DF}
    12. DEFINE_GUID( IID_IDMPlugIn,
    13.              0x959cd0d3, 0x83fd, 0x40f7, 0xa7, 0x5a, 0xe5, 0xc6, 0x50, 0x0b, 0x58, 0xdf);
    14. class   IDMPlugIn: public IUnknown
    15. {
    16. public:
    17.     virtual WCHAR * __stdcall getID(void);
    18.     virtual WCHAR * __stdcall GetName(void);
    19.     virtual WCHAR * __stdcall GetVersion(void)
    20.     virtual WCHAR * __stdcall GetDescription(WCHAR* language)
    21.     virtual WCHAR * __stdcall GetEmail(void);
    22.     virtual WCHAR * __stdcall GetHomepage(void);
    23.     virtual WCHAR * __stdcall GetCopyright(void);
    24.     virtual WCHAR * __stdcall GetMinAppVersion(void);
    25.  
    26.     virtual void    __stdcall PluginInit(IDMPlugIn* _IDMPlugIn);
    27.     virtual void    __stdcall PluginConfigure(WCHAR* params);
    28.     virtual void    __stdcall BeforeUnload(void);
    29.  
    30.     virtual WCHAR * __stdcall EventRaised(WCHAR* eventType, WCHAR* eventData);
    31.     WCHAR*  ID = getID();
    32. };
    Так вот правильно ли я это сделал?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    WideString afair это собственный паскалевский тип данных.
    и че-то я не вижу ассоциации интерфейса и GUID'a.
    вообще не пробовал у них на форуме поискать?
     
  3. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    не знал про WideString (думал эт тож самое, что и WCHAR или на крайний случай UNICODE_STRING :)))
    По дельфийскому сорсу связи не вижу.
    На форуме у них все на Delphi.
     
  4. Max

    Max Member

    Публикаций:
    0
    Регистрация:
    22 май 2003
    Сообщения:
    192
    работа с widestring в делфях сводится к OLEAUT32.dll (SysReAllocStringLen etc.).
    лучше всего откомпилить на делфях тестовый пример и посмотреть в отладчике как оно работает со строками, по любому полезно будет ;)