【问题标题】:Create Silverlight Assembly having C/C++ Reference创建具有 C/C++ 参考的 Silverlight 程序集
【发布时间】:2011-06-08 04:21:44
【问题描述】:

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

尝试的方法:

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

编译工作正常,但是当我尝试从 Silverlight 项目中引用 C 方法时,会导致 CLR 之外的本机调用问题。

网址参考。 - 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 Wrapper Class Lib 项目,该项目调用 C++ CLR Lib,它也是一个托管程序集
  3. 将 C#/.Net 托管程序集 Wrapper dll 转换为 silverlight 托管程序集 dll
  4. 在 silverlight 应用程序中使用 silverlight dll

网址参考。 - http://www.netfxharmonics.com/2008/12/Reusing-NET-Assemblies-in-Silverlight

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

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

TIA, 安东尼

【问题讨论】:

    标签: .net silverlight


    【解决方案1】:

    基本上,您希望从 Silverlight 访问 COM 互操作程序集。

    这只能在受信任的应用程序中实现 (http://msdn.microsoft.com/en-us/library/ee721083(v=vs.95).aspx)

    SL 4 中的受信任应用程序仅允许在 OOB 应用程序中使用,如果您想在 Silverlight 中使用来自 Web 应用程序的 COM 互操作程序集,则必须使用 SL5。

    以下是有关如何从受信任的应用程序中使用 COM 互操作的一些额外信息:

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

    希望对你有所帮助。

    【讨论】:

      【解决方案2】:

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

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

      您目前的选择是:

      1. 为您的库创建一个 COM 包装器
      2. 等待 Silverlight 5 并使用 P/Invoke

      AFAIK 两种解决方案都需要在启动 silverlight 应用程序之前在客户端上安装本机代码库。

      【讨论】:

      • 本周终于尝试了 Silverlight 5 选项,结果是它仍然无法运行混合程序集 (C++/C) silverlight dll。它会导致安全异常错误。仅当用户通过注册表项确认信任级别时,才能访问(读/写)某些文件夹/文件。
      • 该操作的最终目标是拥有一个与 Silverlight 兼容的库,它可以直接加载在 silverlight dll 中编译的 C/C++ 函数。尽量避免在客户端安装任何东西。所有代码 /lib 都应嵌入 In browser silverlight 应用程序本身。
      猜你喜欢
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多