Как экспортировать функции из элемента управления ActiveX (.ocx), которых нет в основном классе? - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть C ++ DLL с более чем 100 экспортированными функциями, которые я хочу преобразовать в файл OCX. Однако я знаю только, как экспортировать функции из OCX, которые находятся в главном классе (называемом CmyCtrl мастером управления ActiveX в Visual Studio 10)… делая это:

BEGIN_DISPATCH_MAP(CmyCtrl, COleControl)
    DISP_FUNCTION_ID(CmyCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
END_DISPATCH_MAP()

и используя соответствующие определения IDL.

Я не очень заинтересован в реструктуризации всего большого проекта и переносе каждого определения функции (которые распределены по примерно 20 файлам) в класс. Могу ли я экспортировать функции из OCX (с полной поддержкой Intellisense и т. Д. В VB6, где будет использоваться элемент управления), которых нет в классе? Как мне это сделать и что я должен иметь в виду?

1 Ответ

1 голос
/ 15 декабря 2011

У вас должен быть где-нибудь мастер для добавления нового «ATlObject», что означает создание нового класса, создаваемого с помощью COM. При этом вы можете разделить свою функцию на разные классы. Предположим, у вас есть ATL-проект, при добавлении нового класса должен появиться этот мастер: enter image description here

Создав новый простой объект ATL, вы получаете еще один класс с экспортированной функцией классическим способом COM. Если вы хотите, вы всегда можете экспортировать функцию с помощью dllexport, но в этом случае вы не можете использовать COM для взаимодействия с вашим компонентом. Вы даже можете вызвать функцию, экспортированную с помощью dll (ocx) обычным способом, используя стратегию:

Private Declare Function MyFuncName Lib "yourocx.ocx" ([.. parameters]) As [Return type]

но в вашем случае это, вероятно, не тот путь.

...