好的,我有一个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 ...”。
答案 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错误中发生的事情的详细信息,然后您可以决定要修复它需要做什么。