4

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

因为我可以使用 dllImport 来使用它,即

   [DllImport(@"D:\myLib\Debug\myLib.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

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

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

谢谢,

维平

4

1 回答 1

1

当 Silverlight 5 Release Candidate 公开时,我创建了一些支持方法来处理将非托管非系统 DLL:s 与 Silverlight 5 RC 应用程序捆绑在一起的问题。该解决方案仍然有效,因为 Microsoft 没有添加任何支持来处理 Silverlight 5 RTM 中的捆绑问题。

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

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

有关此解决方案的更多详细信息,请参阅博客文章。

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

更新

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

于 2013-03-13T06:49:31.537 回答