我試圖在Win7 x64機器上安裝並運行32位應用程序。該應用程序構建爲Win32應用程序。它在32位平臺上運行良好。在x64機器上,它正確安裝在程序(x86)目錄中並運行正常,直到我撥打一個32位dll的電話。那時我得到不正確的格式錯誤(0x8007000b),表明它正在嘗試加載錯誤位的dll。事實上,它試圖從System32目錄中加載64位dll,而不是SystemWOW64目錄中的32位版本。32位dllimport在win7 x64平臺上生成不正確的格式錯誤(0x8007000b)
由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);
}
我已經做了更多的測試,並有更奇怪的結果...正如我下面評論。一個DLL實際上調用了上面的DllImport函數。我能夠創建一個正確使用這些函數的程序,即它們被稱爲32位。我創建了一個加載DLL的新程序,它可以進行調用,並且它也可以正常運行。失敗的程序具有相同的項目設置(x86),但Windows需要加載64位版本。我已經嘗試了corflags/32bit ++也無濟於事。我非常難過.... – DFP 2010-08-20 18:18:47