Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PowerBuilder调用C#DLL_C#_Multithreading_Dll_Powerbuilder - Fatal编程技术网

从PowerBuilder调用C#DLL

从PowerBuilder调用C#DLL,c#,multithreading,dll,powerbuilder,C#,Multithreading,Dll,Powerbuilder,好的,我有一个PowerBuilder应用程序。我可以创建一个DLL文件c#来打开一个新线程在后台运行进程吗?在我的PowerBUilder应用程序中调用此dll?这可能吗 以下是我的示例代码: 类别2.cs string vartest; public void testonly() { vartest = "TESTING ONLY"; } public string threadtest() { Thread

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

以下是我的示例代码:

类别2.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”变量的行中出现一个错误,上面写着“调用外部函数时出错…”。

什么版本的PowerBuilder?这是PowerBuilder Classic还是.Net?登记妥当了吗?尝试从VBScript进行测试,看看会发生什么

官方论坛在这里:

什么版本的PowerBuilder?这是PowerBuilder Classic还是.Net?登记妥当了吗?尝试从VBScript进行测试,看看会发生什么

官方论坛在这里:

  • 是否检查了ConnectToneObject的返回值?成功了吗

  • 通过搜索要连接的类来检查注册表

  • 您也可以在ConnectToneObject中使用GUID,您可以在注册表中找到该GUID吗

  • 你有没有让C#class变得可见

      • 是否检查了ConnectToneObject的返回值?成功了吗

      • 通过搜索要连接的类来检查注册表

      • 您也可以在ConnectToneObject中使用GUID,您可以在注册表中找到该GUID吗

      • 你有没有让C#class变得可见


      很抱歉回答得太晚。为了便于参考,可以在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错误发生情况的详细信息,然后您可以决定需要执行哪些操作来修复该错误

      很抱歉回答晚了。为了便于参考,可以在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错误发生情况的详细信息,然后您可以决定需要执行哪些操作来修复该错误

      你试过先问Google先生吗?@L-Three是的,很遗憾,PowerBuilder的支持社区很少。不知道你做了什么,但有很多Google结果,例如:。我已经知道如何从PowerBuilder调用DLL。忘了提了,对不起。我的问题是,调用DLL时是否可以在该DLL中启动新线程?为什么不可以?创建一个小POC来测试它。你试过先问Google先生吗?@L-Three是的,很遗憾,PowerBuilder的支持社区很少。不知道你做了什么,但有很多Google结果,例如:。我已经知道如何从PowerBuilder调用DLL。忘了提了,对不起。我的问题是,调用DLL时是否可以在该DLL中启动新线程?为什么不可以?创建一个小POC来测试它。您好,我正在使用PB Classic 12.5。如何检查它是否正确注册?我使用的regasm.exe是这样的“C:\Windows\Microsoft.NET\Framework64\v4.0.30319>regasm\”,上面写着“类型注册成功”。您好,我使用的是PB Classic 12.5。如何检查它是否正确注册?我使用的regasm.exe是这样的“C:\Windows\Microsoft.NET\Framework64\v4.0.30319>regasm\”,上面写着“类型注册成功”。