【发布时间】:2011-08-09 22:25:04
【问题描述】:
在 x64 平台 (Windows 7) 上运行时调用 x86 dll 中的方法时,我收到“AccessViolationException”“试图读取或写入受保护的内存”。一切都在 x86 平台上运行良好。
我已经阅读了很多很多关于类似问题的帖子,但我的代码无法正常工作。
我正在努力让我们的旧 x86 应用程序在 Windows 7 (x64) 和 Server 2008 R2 (x64) 上正常运行。该应用程序包含 VB6、VB.Net、C#、MicroFocus COBOL 和 C++。 (我们当时想不出任何其他语言可以加入)。 DotNet 代码最初是在 Visual Studio 2003 中为 DotNet 1.1 编写的。我已将代码移植到 Visual Studio 2010 和 DotNet 4.0。我已将所有项目的目标设置为 x86。当我调用非托管 32 位 dll 时,出现上述错误。
我们的 InstallShield 安装例程将 x86 dll 安装到 C:\Windows\sysWOW64 而不是 C:\Windows\System32。这种行为似乎是正确的。 dll 是一些 COBOL 目标代码和运行时组件,它们链接在一起形成一个“C 风格”的 dll。我不认为问题与 COBOL 或链接过程有关,因为我还从 Code Project 中移植了一个示例应用程序,其中包含一个调用简单 C++ dll 的 VB.Net WinForms 应用程序,所有这些应用程序都针对 x86。我在那里得到同样的错误。我还尝试构建一个 C++ 命令行应用程序来调用 dll。加载库成功。 GetProcAddress 成功。调用特定方法的函数指针失败。在 Windows 7 x64 上运行时,我们的 VB6 应用程序可以很好地调用 dll。我还尝试关闭 UAC 并将清单中的 requestedExecutionLevel 设置为最高可用。我试过以管理员身份运行。
似乎这应该可行,但不确定接下来要尝试什么。有什么想法吗?
【问题讨论】:
标签: dll x86 64-bit access-violation