2011-06-08 99 views
0

當前我正在嘗試編譯Silverlight項目的C/C++庫,以便在Silverlight In-Browser應用程序中重新使用基於c的編解碼器-FXMpeg。創建具有C/C++參考的Silverlight程序集

途徑的嘗試:

1)嘗試通過聲明其在DLL導出爲c函數中包含Silverlight DLL項目中的C++類 - (DLLEXPORT)__declspec

彙編作品,但是當我試圖在CLR問題之外的本機調用中引用Silverlight項目結果中的C方法。

url ref。 - http://social.msdn.microsoft.com/Forums/en-US/clr/thread/339afacb-c9f2-46a4-9feb-8df793a65155

因此,我在進一步閱讀後意識到silverlight錯誤是因爲CLR能夠只允許託管程序集而不是本地代碼。

結論:在Silverlight dll中不能直接包含C++/C代碼。

2)接下來,我一直在嘗試創建一個基於C++的託管程序集,目標是在Silverlight託管程序集中包含一個簡單的C++類/ C函數。

步驟 -

  1. 創建一個C++ CLR類庫項目提供託管程序
  2. 創建一個C#/。NET包裝類庫項目,它調用C++ CLR庫,這也是一個管理組件
  3. 轉換的C#/。NET管理組件包裝DLL到一個Silverlight管理組件的dll
  4. 消耗Silverlight應用程序
內的Silverlight的DLL 0

url ref。 - http://www.netfxharmonics.com/2008/12/Reusing-NET-Assemblies-in-Silverlight

結論:不確定可能性,因爲我仍然試圖通過有點複雜的轉換步驟取得成功。

是否有經過測試的方法能夠在Silverlight Lib中重用C代碼?

TIA, 安東尼

回答

1

基本上你想從Silverlight的訪問COM Interop程序集。

這是唯一可能的在一個可信應用(http://msdn.microsoft.com/en-us/library/ee721083(v=vs.95).aspx)

在SL 4信任的應用程序是隻允許在OOB應用程序中使用,如果要在Silverlight中使用Web應用程序中的COM Interop程序集,則必須使用SL5。

下面是關於如何從受信任的應用程序中使用COM互操作一些額外的信息:

http://www.uxmagic.com/blog/post/2010/03/09/COM-InterOp-for-Trusted-Applications-in-Silverlight.aspx

希望這有助於你。

0

在Silverlight 4中,您只能通過COM互操作訪問本機代碼。它不會將本機代碼包裝在混合模式(C++/CLI)程序集中。

Silverlight的下一個版本將允許您通過P/Invoke訪問本機代碼。不知道它是否會支持混合模式程序集。

您當前的選項有:

  1. 是你的庫
  2. 等待的Silverlight 5以及請使用P創建一個COM包裝/調用

據我所知這兩種解決方案都需要本機代碼庫在啓動Silverlight應用程序之前安裝在客戶端上。

+0

本週最後嘗試了Silverlight 5選項,其判決是它仍然無法運行混合程序集(C++/C)silverlight dll。它會導致安全異常錯誤。僅當用戶通過註冊表項確認信任級別時纔可以訪問(讀取/寫入)某些文件夾/文件。 – Anthony 2011-06-18 15:05:47

+0

該操作的最終目標是擁有一個Silverlight兼容庫,它直接加載編譯在Silverlight dll中的C/C++函數。試圖避免在客戶端安裝任何東西。所有的代碼/ lib應該嵌入In瀏覽器Silverlight應用程序本身。 – Anthony 2011-06-18 15:15:38