2015-12-09 119 views
1

好吧,我有一個PowerBuilder應用程序。我可以做一個DLL文件的c#,打開一個新的線程來在後臺運行一個進程?並在我的PowerBUilder應用程序中調用這個DLL?是這樣的可能嗎?從PowerBuilder調用C#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; 
    } 

這裏就是我把這個DLL從位於窗口打開時我的PowerBuilder應用程序:

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

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

但是,在我初始化「測試」變量的行中,我的PowerBuilder應用程序中出現錯誤,提示「錯誤調用外部函數...」。

+2

你有沒有試過先問Google先生? –

+0

@ L - 三個是的,可悲的是,PowerBuilder有最小的支持社區。 – Dac

+2

不知道你做了什麼,但有很多谷歌的結果,例如:http://blogs.artinsoft.net/Mrojas/archive/2009/03/03/Calling-NET-from-PowerBuilder.aspx。 –

回答

0

什麼版本的PowerBuilder?這是PowerBuilder經典還是.Net?它是否正確註冊?嘗試從VBScript進行測試,看看會發生什麼。

官方論壇就在這裏: http://scn.sap.com/community/developer-center/powerbuilder

+0

你好,我使用PB Classic 12.5。我如何檢查它是否正確註冊?我正在使用regasm.exe,像這樣的「C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319> regasm \ 」,它說「類型註冊成功」。 – Dac

0
  • 你檢查ConnectToNewObject的返回值?它成功了嗎?

  • 檢查註冊表通過搜索你正在試圖連接到

  • 您還可以使用在ConnectToNewObject的GUID類,你可以發現,GUID在註冊表中?

  • 您是否讓C#類ComVisible?

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錯誤,然後你就可以決定你需要做什麼來解決它發生了什麼事的細節。