从PowerBuilder调用C#DLL

时间:2015-12-09 07:41:58

标签: c# multithreading dll powerbuilder

好的,我有一个PowerBuilder应用程序。我可以创建一个DLL文件c#,它打开一个新线程来在后台运行进程吗?并在我的PowerBUilder应用程序中调用此DLL?这样的事情可能吗?

以下是我的示例代码:

Class2.cs

    string vartest;
    public void testonly()
    {
        vartest = "TESTING ONLY";
    }

    public string threadtest()
    {
        Thread workerThread = new Thread(new ThreadStart(testonly));
        workerThread.Start();
        Thread.Sleep(10000);
        workerThread.Abort();
        return vartest;
    }

这是我从位于窗口打开事件中的PowerBuilder应用程序调用此DLL的地方:

OLEObject myoleobject
myoleobject = CREATE OLEObject
myoleobject.connecttonewobject("Sample.Class2") 

string test
test = myoleobject.threadtest()
messagebox('', test)

但是,我在我的PowerBuilder应用程序中出现错误,该错误在我初始化“test”变量的行中显示“Error calling external function ...”。

3 个答案:

答案 0 :(得分:0)

什么版本的PowerBuilder?这是PowerBuilder Classic还是.Net?它是否正确注册?尝试从VBScript进行测试,看看会发生什么。

官方论坛在这里: http://scn.sap.com/community/developer-center/powerbuilder

答案 1 :(得分:0)

  • 您检查过ConnectToNewObject的返回值吗?它成功了吗?

  • 通过搜索您要连接的课程

  • 来检查注册表
  • 您还可以在ConnectToNewObject中使用GUID,是否可以在注册表中找到该GUID?

  • 你有没有让C#类变得可见?

答案 2 :(得分:0)

对不起,迟到了。作为参考,可以在OleRuntimeError对象中找到问题的详细信息,该对象随您遇到的异常一起返回。例如,尝试将此try catch块添加到您的代码中:

try
    test = myoleobject.threadtest()
catch (OleRuntimeError oleex)
    Messagebox("OleRuntimeError", oleex.description + "~n" + oleex.GetMessage())
catch (RuntimeError ex)
    Messagebox("RuntimeError",ex.GetMessage())
end try

这应该向您显示有关OLE错误中发生的事情的详细信息,然后您可以决定要修复它需要做什么。