gpt4 book ai didi

visual-studio-2010 - 尝试加载 dll 时出错 - 尝试加载格式不正确的程序。 (HRESULT : 0x8007000B) 的异常

转载 作者:行者123 更新时间:2023-12-03 09:27:45 25 4
gpt4 key购买 nike

我在我的 asp.net Web 应用程序中使用第 3 方 C++ dll。

dll - 64-bit
asp.net Platform - Any Cpu
asp.net Framework - 4.0 (vs 2010)
System Os - Win 7 Professional (64-bit)

我已将 dll 放在“Applications”文件夹中,并调用该 dll,其完整路径为:

[DllImport(@"D:\Application\Sampledll.dll",
EntryPoint = "SampleFunc",
CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.StdCall)]
public static extern int SampleFunc(char[] ch1, char[] ch2);

但我得到了以下结果:

An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)

当使用错误代码进行搜索时:0x8007000B - 这意味着“在 64 位系统上使用 32 位 dll”

但是该dll是64位dll....

我尝试通过将 VS 的目标平台更改为“x86”和“x64”并将 IIS 的“启用 32 位应用程序”属性设置为“True”来尝试解决此错误

但是遇到了同样的错误......

谁能帮忙解决这个问题......

最佳答案

错误代码0x8007000B是代表Win32错误ERROR_BAD_FORMAT的COM错误代码。通常,当 32 位进程尝试加载 64 位 DLL 时(反之亦然),错误代码为 ERROR_BAD_EXE_FORMAT,当包装在 COM 错误代码中时,该错误代码将显示为 0x800700C1

因此,我认为问题不是 32/64 位不匹配。最可能的解释是 DLL 或其依赖项之一已损坏。

为了调试这个问题,我将消除 IIS 的复杂性。您需要处理更多的 p/invoke 和 IIS 层。首先确保您可以从另一个 native 程序加载此 DLL。在 VS 中创建一个 64 位 C++ 控制台应用程序来执行以下操作:

#include <windows.h>
#include <iostream>

int main()
{
if (!LoadLibraryA("D:\\Application\\Sampledll.dll"))
{
std::cout << GetLastError() << std::endl;
}
}

看看运行它时会发生什么。如果您收到错误代码,它的值是什么?是ERROR_BAD_FORMAT吗?此时,我将在配置文件模式下使用 Dependency Walker 来尝试找出哪个 DLL 是麻烦制造者。

关于visual-studio-2010 - 尝试加载 dll 时出错 - 尝试加载格式不正确的程序。 (HRESULT : 0x8007000B) 的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16896718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com