【问题标题】:3rd party DLL works in Console application but throws protected memory error in WPF第 3 方 DLL 在控制台应用程序中工作,但在 WPF 中引发受保护的内存错误
【发布时间】:2015-04-03 10:32:20
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    在我看来,DLL 中的代码似乎在践踏 WPF 使用的东西。 C#/WPF 中的所有内容(除非您开始使用 unsafe 关键字)都是安全的,并且不会做类似的事情,但如果高兴的话,DLL 中的非托管代码很可能会直接访问程序地址空间中的内存。

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

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

    【讨论】:

      猜你喜欢
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 2021-11-27
      相关资源
      最近更新 更多