PowerBuilder中的.NET互操作

我正在寻找一种在PB对象和.NET(C#)对象之间进行双向通信的方法。 在查看Brad的.NET控件的.NET版本时,我看到了如何为.NET对象提供对PB对象的引用。 但是在那个例子中,它被强制转换为PowerObject(基本上)。 C#代码只调用PB对象上的TriggerEvent()。

我想在C#中创建一个名为foo1的自定义类。 我想在foo1上创建一个名为bar1()的方法。

我想在PB中创建一个名为foo2的自定义类。 我想在foo2上创建一个名为bar2()的方法。

我希望能够在foo2中创建foo1的实例。 我希望能够从foo2中调用foo1.bar1()。

(我很高兴,直到这里。)

我希望能够从foo1中引用foo2。 我希望能够从foo1中调用foo2.bar2()。

我确信有更聪明的方法可以做到这一点,但使用COM可能是最简单的方法。

  • 在PowerBuilder中使用COM
  • 在.NET中使用COM

有些人会说COM永远不是正确的答案,但我说使用正确的工具来做正确的工作。

我使用了这里的想法来创建我的C#控件,它可以从PB和Qt调用它。

将Windows窗体公开为ActiveX控件

您可能还想查看P / Invoke

如果您想要连接用不同技术编写的对象,PowerBuilder(版本6,7和8.0)只能正确理解BINARY契约。 实际上,它意味着具有IDispatch接口的COM对象(所谓的OleAutomation)。 它与VB6或jscript(带有wscript)等解释语言可以使用的对象相同。

您不必处理ConnectionPoints以在对象之间进行异步通信。 使用您自己的常规接口。

不要使用Watcom C ++编译器来构建任何“代理对象” – 几年前它是非常弱的编译器。 我试图编译并构建一些解决方案,它在编译期间显示了许多内部错误。 MS C ++编译器完成编译没有任何问题。

请记住,您的物品应与公寓兼容。 PB仅使用STA(单线程公寓)。 请检查一下 – 最近可能发生了一些变化。