Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何添加非托管C++;将dll集成到Silverlight 5项目中_C#_C++_Silverlight 5.0 - Fatal编程技术网

C# 如何添加非托管C++;将dll集成到Silverlight 5项目中

C# 如何添加非托管C++;将dll集成到Silverlight 5项目中,c#,c++,silverlight-5.0,C#,C++,Silverlight 5.0,我需要使用一个自己的非托管C++ DLL到Silverlight 5项目。 因为我能够使用dllImport使用它,即 [DllImport(@"D:\myLib\Debug\myLib.dll")] static extern int add(IntPtr ptr); 我在DllImport遇到了一条绝对路径,它工作得很好。但我的问题是,我想使用相对路径 因为我需要在我的Silverlight 5项目中添加非托管C++ DLL,并从那里指定路径。 我正在调查从过去两天我没有找到

我需要使用一个自己的非托管C++ DLL到Silverlight 5项目。 因为我能够使用dllImport使用它,即

   [DllImport(@"D:\myLib\Debug\myLib.dll")]
    static extern int add(IntPtr ptr);
我在DllImport遇到了一条绝对路径,它工作得很好。但我的问题是,我想使用相对路径

因为我需要在我的Silverlight 5项目中添加非托管C++ DLL,并从那里指定路径。 我正在调查从过去两天我没有找到任何解决这个问题的办法

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

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

请建议过来处理这个问题,因为这对我来说真的很紧急

谢谢


Vipin

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

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

当然,需要提高信任

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

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

更新


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

DllImportAttribute不会将非托管库嵌入到Silverlight应用程序中(顺便说一句,绝对避免这种绝对路径)。它只是添加对该库的引用,但必须单独下载和安装。您的SL5应用程序是否以提升的权限运行?如果不是,我就不能使用非托管DLL。该页面有一个“备注”部分,概述了您可能收到此错误的原因。我会仔细检查它们,看看这是否有助于解决问题。BadImageFormatException可能是32位对64位的问题。确保Silverlight安装程序以与本机DLL相同的位运行。如果在任何P/Invoke调用之前使用LoadLibrary函数(因为您有一个有效的路径),可能可以避免更改系统路径。在进程中加载DLL后,DllImport应该会成功。它以前在标准.NET上工作,我没有在SL中测试过。非常感谢您的评论,@SimonMourier。我没有考虑过这个选择,但它似乎是可行的。简单的谷歌搜索表明,其他人在SL中已经成功地使用了这种方法。我将用这些新信息更新答案。