4

我正在寻找一种在 PB 对象和 .NET (C#) 对象之间进行双向通信的方法。在查看 Brad 的 GUI 控件的 .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()。

4

3 回答 3

1

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

将 Windows 窗体公开为 ActiveX 控件

您可能还想查看 P/Invoke

于 2009-06-02T17:44:18.870 回答
0

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

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

于 2009-05-22T15:02:37.873 回答
0

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

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

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

请记住,您的对象应该与公寓兼容。PB 仅使用 STA(单线程单元)。请检查一下——也许最近发生了一些变化。

于 2009-05-27T20:11:29.030 回答