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



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

同一家公司有一个C#"包装器"类,它只包含一堆常量和许多DllImport包装的静态方法。当我编写一个控制台应用程序并从那里使用包装器类时,这一切都非常完美。

然而,当我在WPF程序中包含相同的代码时,它会在第一次调用包装器/DllImported函数时中止,并出现"对受保护内存的读/写访问"异常。我没有访问DLL的源代码的权限。

我有扎实的UNIX背景,但我的Windows技能还不够好。因此,我想问:我从哪里开始寻找这种错误?

它感觉像是一个特权、线程或类似问题。当相同的代码在WPF应用程序中不起作用时,控制台应用程序可以在没有我做任何特殊事情的情况下工作,我觉得这是有线索的——我只是不太清楚,看不到线索或不知道该搜索什么。:-)

对我来说,DLL中的代码似乎践踏了WPF使用的东西。C#/WPF中的所有内容(除非你开始抛出unsafe关键字)都是安全的,不会做这样的事情,但DLL中的非托管代码很可能会直接访问程序地址空间中的内存。

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

你可能想联系负责的公司(尽管我意识到这并不总是最容易的事情,因为很多地方都不会及时或根本做出回应),因为他们可以用面前的代码轻松回答有关问题,并确定要解决的问题或解决的问题。

最新更新