Взаимодействие .NET в PowerBuilder

Я ищу способ двусторонней связи между объектом PB и объектом .NET (С#). Глядя на .NET-версию элементов управления Брэда с графическим интерфейсом, я вижу, как дать объекту .NET ссылку на объект PB. Но в этом примере он приведен как PowerObject (в основном). Этот код C# вызывает TriggerEvent() только для объекта PB.

Я хочу создать собственный класс на С# с именем foo1. Я хочу создать метод для foo1 с именем bar1().

Я хочу создать собственный класс в PB с именем foo2. Я хочу создать метод для foo2 с именем bar2().

Я хочу иметь возможность создать экземпляр foo1 в foo2. Я хочу иметь возможность вызывать foo1.bar1() из foo2.

(До сих пор мне хорошо.)

Я хочу иметь возможность ссылаться на foo2 изнутри foo1. Я хочу иметь возможность вызывать foo2.bar2() из foo1.


person Jason 'Bug' Fenter    schedule 08.05.2009    source источник


Ответы (3)


Я уверен, что есть более эффективный способ сделать это, но использование COM может быть самым простым.

Некоторые люди сказали бы, что COM никогда не будет правильным ответом, но я говорю, что используйте правильный инструмент для правильной работы.

person JasonRShaver    schedule 22.05.2009

Я использовал идею отсюда, чтобы создать свой элемент управления C #, и он работал с вызовом из PB и Qt.

Отображение Windows Form в качестве элемента управления ActiveX

Вы также можете посмотреть P/Invoke

person user38230    schedule 02.06.2009

PowerBuilder (версии 6, 7 и 8.0) правильно понимает только ДВОИЧНЫЕ контракты, если вы хотите соединить объекты, написанные на разных технологиях. На самом деле это COM-объекты с интерфейсом IDispatch (т.н. OleAutomation). Это тот же тип объектов, которые могут использоваться интерпретируемыми языками, такими как VB6 или jscript (с wscript).

Вам не нужно иметь дело с ConnectionPoints для асинхронной связи между объектами. Используйте собственные стандартные интерфейсы.

Не используйте компилятор Watcom C++ для создания любых "прокси-объектов" - несколько лет назад это был очень слабый компилятор. Я пытался скомпилировать и построить какое-то решение, и во время компиляции появилось много внутренних ошибок. Компилятор MS C++ выполнил компиляцию без проблем.

Помните, что ваши объекты должны быть совместимы с квартирой. PB использует только STA (Single Threaded Apartment). Пожалуйста, проверьте его - возможно, что-то изменилось в последнее время.

person Aleksander Stankiewicz    schedule 27.05.2009