我需要在Silverlight 5项目中使用我自己的非托管C ++ DLL。
因为我可以使用dllImport即
来使用它 [DllImport(@"D:\myLib\Debug\myLib.dll")]
static extern int add(IntPtr ptr);
当我在DllImport中提到一条绝对的路径时,它工作得很好。但我的问题是,我想使用相对路径。
因为我需要在我的silverlight 5项目中添加非托管C ++ dll并从那里指定路径。 我正在调查过去两天我没有找到任何解决这个问题的方法。
只有我找到了下面提到的一个相关链接,但它也无济于事。
因为它建议如何将非托管dll嵌入到托管程序集中。 我试过这种方法但是我得到了“BadImageException”。
请建议过来解决这个问题,因为这对我来说非常紧急。
谢谢,
VIPIN
答案 0 :(得分:1)
当Silverlight 5 Release Candidate公开时,我创建了一些支持方法来处理将非托管非系统DLL与您的Silverlight 5 RC应用程序捆绑在一起的问题。该解决方案仍然有效,因为Microsoft没有添加任何支持来处理Silverlight 5 RTM中的捆绑问题。
我所做的基本上是将非托管DLL捆绑为资源文件。通过手动调用的辅助方法,例如,在应用程序启动事件处理程序中,资源被复制到磁盘上的预定义位置。然后,该位置在执行期间也包含在系统PATH中。
需要提升信任度(当然)。
有关此解决方案的更多详细信息,请参阅this博文。
可以在Github上找到与此解决方案相关的所有代码,包括样本测试。
<强>更新强>
正如Simon Mourier在下面的评论中所指出的,一个选项也是通过调用 Kernel32 LoadLibrary函数加载到内存中(并在应用程序退出时释放)非托管DLL从资源中解压缩DLL之后。有关Silverlight的方法在this博客文章中有更详细的描述。