目前我正在尝试为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函数。
步骤 -
url ref。 - http://www.netfxharmonics.com/2008/12/Reusing-NET-Assemblies-in-Silverlight
结论:不确定可能性,因为我仍然试图通过转换步骤获得成功,这有点复杂。
是否有经过测试的方法可以在Silverlight Lib中重用C代码?
TIA, 安东尼
答案 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访问本机代码。不知道它是否支持混合模式组件。
您当前的选择是:
AFAIK这两种解决方案都需要在启动silverlight应用程序之前在客户端上安装本机代码库。