如何将非托管c++ dll添加到Silverlight 5项目中

How to add unmanaged C++ dll into a Silverlight 5 project

本文关键字:添加 Silverlight 项目 dll c++      更新时间:2023-10-16

我需要在Silverlight 5项目中使用我自己的非托管c++ dll。

因为我可以使用dllImport,即

   [DllImport(@"D:myLibDebugmyLib.dll")]
    static extern int add(IntPtr ptr);

它工作得很好,因为我在DllImport中提到了绝对路径。但是我的问题是,我想使用相对路径。

因为我需要在我的silverlight 5项目中添加非托管c++ dll并从那里指定路径。我已经调查了两天了,但没有找到解决这个问题的办法。

我只找到了下面提到的一个相关链接,但它也没有帮助。

http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.dllimportattribute.aspx

As它建议如何将非托管dll嵌入托管程序集。我尝试了这种方法,但我得到了"BadImageException"。

请建议解决这个问题,因为这对我来说真的很紧急。

谢谢,

一些

当Silverlight 5发布候选版本公开时,我创建了一些支持方法来处理将非托管的非系统DLL与Silverlight 5 RC应用程序捆绑在一起的问题。这个解决方案仍然有效,因为微软没有在Silverlight 5 RTM中添加任何支持来处理捆绑问题。

我所做的基本上是将非托管DLL捆绑为资源文件。通过手动调用助手方法,例如在应用程序启动事件处理程序中,将资源复制到磁盘上的预定义位置。在执行过程中,这个位置也包含在系统路径中。

提升信任是必需的(当然)。

关于这个解决方案的更多细节可以在这篇博客文章中找到。

与此解决方案相关的所有代码,包括示例测试,都可以在Github上找到。

正如Simon Mourier在下面的评论中指出的那样,一种选择也是在DLL从资源中解包后,通过调用Kernel32 LoadLibrary函数将非托管DLL加载到内存中(并在应用程序退出时释放)。这篇博文将详细描述Silverlight的这种方法。