32位dllimport在win7 x64平台上生成错误的格式错误(0x8007000b)

DFP*_*DFP 1 c# migration 64-bit dllimport

我正在尝试在Win7 x64计算机上安装并运行32位应用程序.该应用程序是作为Win32应用程序构建的.它在32位平台上运行良好.在x64机器上,它在Programs(x86)目录中正确安装并运行正常,直到我调用32位dll.那时我得到错误的格式错误(0x8007000b),表明它正在尝试加载错误位数的dll.实际上,它试图从System32目录加载64位dll而不是SystemWOW64目录中的32位版本.

由dll供应商提供的另一个32位应用程序正确运行,它确实从SystemWOW64目录加载32位dll.我没有他们的应用程序的源来看他们如何访问DLL.

我正在使用如下所示的DllImport函数来访问dll.有没有办法装饰DllImport调用强制它加载32位版本?

任何想法都赞赏.

谢谢,DP

public static class Micronas
{
    [DllImport(@"UAC2.DLL")]
    public static extern short UacBuildDeviceList(uint uFlags);
    [DllImport(@"UAC2.DLL")]
    public static extern short UacGetNumberOfDevices();
    [DllImport(@"UAC2.DLL")]
    public static extern uint UacGetFirstDevice();
    [DllImport(@"UAC2.DLL")]
    public static extern uint UacGetNextDevice(uint handle);
    [DllImport(@"UAC2.DLL")]
    public static extern uint UacSetXDFP(uint handle, short adr, uint data);
    [DllImport(@"UAC2.DLL")]
    public unsafe static extern uint UacGetXDFP(uint handle, short adr, IntPtr data);
}
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 5

强制您的.exe以32位模式运行.Project + Properties,Build选项卡,Platform Target = x86.

避免对项目的平台设置感到困惑,它实际上不必与实际设置相匹配.这是Project + Properties,Build选项卡,Platform Target.那里有点乱.