0

我正在使用 DiInstallDevice 功能 ( MSDN ) 来安装驱动程序。但是,在 x86 下构建解决方案时出现链接器错误,而 x64 版本是可以的。错误是 LNK2019,链接无法在 x86 版本的 newdev.lib 中找到函数。这是 x86 和 x64 版本的链接器输出:

x86:

搜索 C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\newdev.lib:
找到 _UpdateDriverForPlugAndPlayDevicesW@20
在 KernelDriverInstaller.obj 中引用
加载 newdev.lib(newdev.dll)
找到 __IMPORT_DESCRIPTOR_newdev
在 newdev.lib(newdev. dll)
加载 newdev.lib(newdev.dll)
发现 newdev_NULL_THUNK_DATA
引用在 newdev.lib(newdev.dll)
加载 newdev.lib(newdev.dll)

x64:

搜索 C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64\newdev.lib:
找到在 KernelDriverInstaller.obj
中引用的 DiInstallDevice
已加载 newdev.lib(newdev.dll)
找到在 KernelDriverInstaller.obj
中引用的 UpdateDriverForPlugAndPlayDevicesW
已加载 newdev。 lib(newdev.dll)
发现 __IMPORT_DESCRIPTOR_newdev
在 newdev.lib(newdev.dll)
中引用 在 newdev.lib (newdev.dll) 中引用
已加载 newdev.lib(newdev.dll) 在newdev.lib(newdev.dll) 中引用已
找到 newdev_NULL_THUNK_DATA newdev.lib(newdev.dll)

如您所见,链接器无法找到 x86 库的函数引用。有人知道这个问题以及如何解决它吗?我正在使用 Win7 x64 + VS2008 SP1。

谢谢

4

1 回答 1

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。

于 2012-07-04T14:17:30.583 回答