创建具有C / C ++参考的Silverlight程序集

时间:2011-06-08 04:21:44

标签: .net silverlight

目前我正在尝试为Silverlight项目编译一个C / C ++库,以便在Silverlight浏览器内应用程序中重用基于c的编解码器 - FFMpeg。

尝试的方法:

1)尝试在Silverlight DLL项目中包含C ++类,方法是声明在dll中导出的c函数,如__declspec(dllexport)

编译有效,但当我尝试从Silverlight项目中引用C方法时,会导致CLR问题之外的Native调用。

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

所以我在进一步阅读之后意识到,银色错误是由于CLR只能允许托管程序集而不是本机代码。

结论:不能直接在silverlight DLL中包含C ++ / C代码。

2)接下来,我一直在尝试创建一个基于C ++的Managed Assembly,目标是在Silverlight Managed Assembly中集成一个简单的C ++类/ C函数。

步骤 -

  1. 创建提供托管程序集的C ++ CLR Class Lib项目
  2. 创建一个C#/ .Net Wrapper类库项目,它调用C ++ CLR Lib,它也是一个托管程序集
  3. 将C#/。Net托管程序集Wrapper dll转换为silverlight托管程序集dll
  4. 在silverlight应用程序中使用silverlight dll
  5. url ref。 - http://www.netfxharmonics.com/2008/12/Reusing-NET-Assemblies-in-Silverlight

    结论:不确定可能性,因为我仍然试图通过转换步骤获得成功,这有点复杂。

    是否有经过测试的方法可以在Silverlight Lib中重用C代码?

    TIA, 安东尼

2 个答案:

答案 0 :(得分: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 Interop的一些额外信息:

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

希望这会对你有所帮助。

答案 1 :(得分:0)

在Silverlight 4中,您只能通过COM互操作访问本机代码。将本机代码包装在混合模式(C ++ / CLI)程序集中没有帮助。

下一版本的Silverlight将允许您通过P / Invoke访问本机代码。不知道它是否支持混合模式组件。

您当前的选择是:

  1. 为您的库创建一个COM包装器
  2. 等待Silverlight 5并使用P / Invoke
  3. AFAIK这两种解决方案都需要在启动silverlight应用程序之前在客户端上安装本机代码库。

相关问题