2011-06-08 107 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