2012-07-04 74 views
0

我使用DiInstallDevice函數(MSDN)進行驅動程序安裝。但是,在x86下構建解決方案時,出現鏈接器錯誤,而x64版本正常。錯誤是LNK2019,鏈接無法在x86版本的newdev.lib中找到函數。下面是一個連接器輸出用於x86和x64版本:DiInstallDevice x86的鏈接器錯誤

86:

搜索C:\ Program Files文件\微軟的SDK \的Windows \ V7.1 \ LIB \ newdev.lib:
找到_UpdateDriverForPlugAndPlayDevicesW @ 20
引用在KernelDriverInstaller.obj
加載newdev.lib(newdev.dll)
實測值__IMPORT_DESCRIPTOR_newdev
引用在newdev.lib(newdev.dll)
加載newdev.li B(newdev.dll)
實測值newdev_NULL_THUNK_DATA
在newdev.lib(newdev.dll)參考
加載newdev.lib(newdev.dll)

64:

搜索C: \ Program Files文件\微軟的SDK \的Windows \ V7.1 \ LIB \ 64 \ newdev.lib:
找到DiInstallDevice
引用在KernelDriverInstaller.obj
加載newdev.l IB(newdev.dll)
實測值UpdateDriverForPlugAndPlayDevicesW
引用在KernelDriverInstaller.obj
加載newdev.lib(newdev.dll)
實測值__IMPORT_DESCRIPTOR_newdev
在newdev.lib(newdev.dll)參考
引用在newdev。 LIB(newdev.dll)
加載newdev.lib(newdev.dll)
實測值newdev_NULL_THUNK_DATA
在newdev.lib(newdev.dll)參考
加載newdev.lib(newdev.dll)

正如您所見,鏈接器無法找到x86庫的函數引用。有人知道關於這個問題的一些事情,以及它如何解決? 我正在使用Win7 x64 + VS2008 SP1。

謝謝

回答

0

問題解決了。 DiInstallDevice聲明被移動到單獨的頭文件並添加了WINAPI聲明。所以正確的聲明應該是:

BOOL WINAPI DiInstallDevice(
        __in_opt HWND hwndParent, 
        __in  HDEVINFO DeviceInfoSet, 
        __in  PSP_DEVINFO_DATA DeviceInfoData, 
        __in_opt PSP_DRVINFO_DATA DriverInfoData, 
        __in  DWORD Flags, 
        __out_opt PBOOL NeedReboot 
        ); 

編輯:6.0A SDK的實際,而不是7.1聲明是正確的。

+0

不要寫你自己的winapi聲明,而是'#include '。並正確設置_WIN32_WINNT宏值,Vista和以上需要。 –

+0

6.0A SDK包含錯誤的聲明(7.1是正確的),所以它是唯一的方法。這個信息可能對某人有幫助。 – Barbarian

+0

嗯,我沒有看到它。發佈一個顯示你使用7的問題。1並不完全有助於澄清任何事情。 –