【问题标题】:Calling a C# (.NET) Method from PowerBuilder从 PowerBuilder 调用 C# (.NET) 方法
【发布时间】:2014-12-19 18:45:51
【问题描述】:

我正在寻找有关调用 C# 模块的方向 (使用 .NET (2.1) 框架编写)来自 PowerBuilder。这是 C#.NET 信息:该函数用于连接COM PORT设备并获取设备状态。

NameSpace:  NETS
Class:    NETS
Method:    REQUESTCARDSTATUS()
DLL:    NETS.dll

在 Powerbuilder 中使用我的 dll 作为 OLE 对象。我使用的是 PowerBuilder 11.5 版。我有一个简单的窗口,上面有一个命令按钮。在此窗口中,我的代码如下所示:

OLEObject ole_3 ole_3 = CREATE OLEObject

// 连接到 C# 类
MessageBox("Value = ", +String(li_rc)) IF li_rc <> 0 THEN DESTROY ole_3 END IF

 li_sum = ole_3.RequestCardStatus(); 

调用此函数时出错 Error R0035: Error Calling External Function.

尝试使用 c# 应用程序调用该函数时,该函数工作正常。我不知道是什么导致了 powerbuilder 中的问题。从过去三天开始尝试,但没有运气。

【问题讨论】:

    标签: c# .net powerbuilder


    【解决方案1】:

    您的代码显示您没有调用 ConnectToNewObject 函数来启动 Ole 服务器应用程序。创建ole_3后,调用RequestCardStatus函数前,应按如下方式调用该函数:

    ole_3.ConnectToNewObject(类名)

    其中 classname 是服务器的 Progid 或 Classid

    【讨论】:

    • 那行在编辑时被我删除了。我已经调用了函数“ConnectToNewObject”。该函数也返回“0”。但是调用函数 ole_3.RequestCardStatus(); 时出现错误;
    • @Apurva 你在你的系统上注册了这个模块吗?
    • 是的,使用 regasm 实用程序注册了模块。
    【解决方案2】:

    C# dll 必须使 COM 可见。

    连接的语法(使用您的示例)将是:ole_3.ConnectToNewObject('NETS.NETS')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      • 2014-12-20
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      相关资源
      最近更新 更多