加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 21:48:54 所属栏目:百科 来源:网络整理
导读:我需要在Silverlight 5项目中使用我自己的非托管C dll. 因为我能够使用dllImport使用它,即 [DllImport(@"D:myLibDebugmyLib.dll")] static extern int add(IntPtr ptr); 它工作正常,因为我在DllImport中提到了一个绝对的路径.但我的问题是,我想使用相对路
我需要在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

因为它建议如何将您的非托管DLL嵌入到托管程序集中.
我试过这种方法,但我得到“BadImageException”.

请建议过来解决这个问题,因为这对我来说非常紧迫.

谢谢,

VIPIN

解决方法

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

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

需要提升信任(当然).

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

与此解决方案相关的所有代码(包括样本测试)均可在Github上找到.

UPDATE

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读