第三方DLL在控制台应用程序中工作但在WPF中引发受保护的内存错误

时间:2015-04-03 10:32:21

标签: c# wpf console-application dllimport access-violation

我正在使用USB I / O单元,该单元具有可从公司网站下载的第三方DLL(DEDITEC,“delib64.dll”)。我在Visual Studio 2013中工作。

同一家公司有一个C#“wrapper”类,它只包含一堆常量和许多DllImport包装的静态方法。当我编写一个Console应用程序并从那里使用包装类时,这一切都很好用。

但是,当我在WPF程序中包含相同的代码时,它会在首次调用wrapper / DllImported函数时以“对受保护的内存的读/写访问”异常中止。我无法访问DLL的源代码。

我有扎实的UNIX背景,但我的Windows技能还不够好。我想问一下:我从哪里开始搜索这种错误?

感觉就像是特权,线程或类似的问题。我觉得有一个线索,即Console应用程序在没有我做任何特殊事情的情况下工作,当相同的代码在WPF应用程序中不起作用时 - 我只是不知道足以看到线索或知道该怎么做搜索。 : - )

1 个答案:

答案 0 :(得分:0)

对我来说,听起来像DLL中的代码正在践踏WPF使用的东西。 C#/ WPF中的所有内容(除非你开始抛出unsafe关键字)是安全的,不会做那样的事情,但DLL中的非托管代码可能会直接访问程序地址空间中的内存,如果它很高兴的话。 / p>

一种解决方法是编写一个控制台应用程序,然后从WPF应用程序调用它(我知道这很脏,但它是一个选项)。

您可能想联系负责的公司(虽然我发现这并不总是最简单的事情,因为许多地方不会及时或根本没有回复),因为他们可以使用前面的代码轻松回答有关它的问题。他们要么找出问题要解决或修复。