2012-10-19 23 views
1

最近,我開始研究Windows手機。我怎樣才能得到一個COM組件,它可以在Windows Phone 8項目上使用C#

我得到了一個用C語言編寫的項目,在我的windows phone 8 Solution中。我創建了一個動態鏈接庫(DLL)項目,並且可以成功構建它。其中,我使用運行時組件項目將DLL的方法提供給UI(C#)項目。在方法中,我有一些指針參數,我使用Intptr對象將一個byte []對象傳遞給運行時組件項目。不幸的是,這導致程序崩潰。

如何將指針參數傳遞給運行時組件項目或DLL項目?也許,有另一種方法可以使用[Dllimort]方法導入我的DLL文件?

任何幫助表示讚賞!

PS:我的解決方案的結構:

  1. [動態鏈接庫項目(C++)] dll_method(無效*對位);

  2. [運行時組件項目(C++)。rc_method(IntPtr的P)

    { 
        dll_method((void*)p); 
    } 
    
  3. [視窗電話8項目(C#)]。方法()

    { 
        GCHandle g = GCHandle.Alloc(byte[], GCHandleType.Pinned); 
        IntPtr p = g.AddrOfPinnedObject(); 
        rc_method(p); 
    } 
    

回答

0

除非您正在進行遠程過程通信,否則要從Windows Phone應用程序項目(C#)調用Windows Phone運行時組件(C++),您只需添加本地項目作爲參考。

您可以將任何WinRT支持的類型作爲參數傳遞。至於回調,你也可以使用事件(如果在同一個進程中),或者傳入回調類型(對於RPC)。

+0

讓我們來看看。你的意思是,如果我運行一個在Windows Phone 8的仿真器上調用Windows Phone運行時組件(C++)的App項目(C#),解決方案必須拋出異常? – ParadoxGao

+0

你沒有任何意義。它可以在仿真器和設備上正常工作。 –

+0

噢!我明白了,但我的意思是,從Windows Phone應用程序項目(C#)調用Windows Phone運行時組件(C++)運行良好,但如果Windows Phone運行時組件(C++)的方法包含一個參數類型是指針,當我調用方法時,應用程序崩潰了。 – ParadoxGao

相關問題