callback функция в отдельном приложении

Автор Maxagg, 13.08.09, 09:25:07

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Maxagg

В данный момент создаю отдельное приложение,
нужно чтоб callback функция работала
незнаю куда ее и как кинуть
напишите плиз код
язык желательно Delphi

Заранее благодарен.

333

Нужно сделать свой класс с наследованием от Dispatch ( В VC++ Делается наследник от CCmdTarget )
в котором реализовать функции обратной связи для Callback-а
Указатель на Dispatch от этого класса передать в ksRequestInfo::SetCallBackC
ksRequestInfo::SetCallBackP
В зависимости от типа процесса.


function SELECTFILTERPROC(_entity: IDispatch): BOOLean; stdcall; Export;
var
Entity:ksEntity;
begin
  //iKompas.ksMessage('ggjgjg');
  Result:=False ;
  Entity:=ksEntity(_entity);
  if Entity<>nil then Result:=True;

  if Entity.IsIt(o3d_thread)then
   begin
     ThreadDefinition:=ksThreadDefinition(Entity.GetDefinition);
     Result:=True;
     //iKompas.ksMessage('444444')
   end;
end;

Вызов
iEntity:=ksEntity(iDoc3D.UserSelectEntity(nil,'SELECTFILTERPROC',
'Укажите условное обозначение езьбы',HINSTANCE,nil));


Maxagg

Цитата: 333 от 13.08.09, 15:04:07
Нужно сделать свой класс с наследованием от Dispatch ( В VC++ Делается наследник от CCmdTarget )
в котором реализовать функции обратной связи для Callback-а
Указатель на Dispatch от этого класса передать в ksRequestInfo::SetCallBackC
ksRequestInfo::SetCallBackP
В зависимости от типа процесса.
Если у вас есть пример на VС++, дайте пожалуйста

Akew

Доброго времени суток!

На C# разрабатываю программу, в виде исполняемого файла, реализующую пользовательский выбор 3D объектов документа.
За основу взял подключаемую библиотеку Step2_API7_3D - она работает, как надо.
Но.
Тот же самый код в .exe реализации не работает - не вызывается функция фильтрации (и calback функция).

В сообщении
Цитата: 333 от 13.08.09, 15:04:07
Нужно сделать свой класс с наследованием от Dispatch ( В VC++ Делается наследник от CCmdTarget )
в котором реализовать функции обратной связи для Callback-а
дана рекомендация для реализации на C++.
Вопрос: как сделать это же на C#? Я искал класс CCmdTarget в C#, но тщетно.

Возможно, существуют другие способы решения этой проблемы.
Пока я могу только догадываться, что в подключаемой библиотеке и в исполняемом файле параметры long hInst и/или LPDISPATCH dispatchOCX должны определяться по-разному (при вызове методов ksRequestInfo3D::SetCallBack и ksRequestInfo3D::SetFilterCallBack). Для hInst удалось найти внятное определение - Marshal.GetHINSTANCE(this.GetType().Module, для dispatchOCX - пока нет.

Спасибо.