Re[11]: "%" вместо "*"
От: SuhanovSergey  
Дата: 25.07.07 19:26
Оценка:
Здравствуйте, Kaukko, Вы писали:


K>GetData — метод неповторимого и важнейшего в программе ActiveX компонента.

Для ActiveX-контрлов как и для других COM-компонентов должны без проблем генерироваться .net-обёртки при условии, что компоненты соотвествую спецификации COM. Вероятно, GetData() ей не соответствует. Раз уж вы всё-равно пишете на C++/CLI, то проще всего воспользоваться основной фичей языка: возможно легко смешивать управляемый и неуправляемый код. Предлагаю рабоатать с вашим ActiveX-объектом с помощью тех же средств C++, которыми вы пользовались раньше, а всё остальное писать в виде управляемого кода. Для примера сделал тестовый проект C++/CLR/Windows Forms Application, бросил на форму контрол "SVGActiveX 3.0" и кнопку с таким onclick-ом:

    System::IntPtr unk = Marshal::GetIUnknownForObject(axSVGCtl1->GetOcx()); // берём указатель на IUnknown
    CComQIPtr<ISVGControl> svgCtrl(static_cast<IUnknown*>(unk.ToPointer())); // получаем ATL-ный CComQIPtr, указывающий на наш контрол
    Marshal::Release(unk); // релизим ссылку, неявно добавленную в GetIUnknownForObject

    // дальше работаем с svgCtrl старыми добрыми средствами  C++, без каких-либо %-ссылок
    svgCtrl->setDefaultFontSize(4.0);
    TCHAR buf[MAX_PATH];
    GetModuleFileName(NULL,buf,MAX_PATH);
    _tcscpy(PathFindFileName(buf), TEXT("1.svg"));
    svgCtrl->put_SRC(CComBSTR(buf));


В начале файла Form1.h:

#include "NPSVG3_h.h" // заколовочный файл с COM-интерфейсами, предварительно сгенерированный с помощью midl. У вас тоже по-идее должен быть такой для вышего компонента.
#include <atlbase.h> // ATL
#include <atlcom.h> // ATL


Могу прислать весь тестовый проект, если интересно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.