Здравствуйте, 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
Могу прислать весь тестовый проект, если интересно.