怎样写一个HID通讯的DLL?用VC写应用代码能用啦!但能DLL编译出错

cyuan5 2007-02-05 03:58:40
HidD_GetHidGuid(&HidGuid);

DevInfo = SetupDiGetClassDevs(&HidGuid,
NULL,
NULL,
(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)
);

DevData.cbSize = sizeof(DevData);

DevDetail = NULL;

Index = -1;

/* Scan all Devices */
do {

Index++;

ok = SetupDiEnumDeviceInterfaces(DevInfo,
0,
&HidGuid,
Index,
&DevData
);
if (!ok) break;

ok = SetupDiGetDeviceInterfaceDetail(DevInfo,
&DevData,
NULL,
0,
&Length,
NULL
);

/* Allocate memory for Device Detailed Data */
DevDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA) malloc(Length);

/* Set cbSize in the DevDetail structure */
DevDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);

/* Get Device Interface Details */
ok = SetupDiGetDeviceInterfaceDetail(DevInfo,
&DevData,
DevDetail,
Length,
NULL,
NULL
);
if (!ok) continue;

/* Create File for Device Read/Write */
DevHandle = CreateFile(DevDetail->DevicePath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
(LPSECURITY_ATTRIBUTES)NULL,
OPEN_EXISTING,
0,
NULL
);
...全文
376 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
czqing 2007-02-12
  • 打赏
  • 举报
回复
用VC直接写就好啦!!!
cyuan5 2007-02-06
  • 打赏
  • 举报
回复
VB调用时 CreateFile函数后返回是-1 后面用GetLastError为0
但VC调用CreateFile能返回一个句柄!
cyuan5 2007-02-06
  • 打赏
  • 举报
回复
VC写DLL VC测试程序没问题,VB调用还是不行呀CreateFile函数创建失败!!!!到底是什么问题呀?
crumpy 2007-02-06
  • 打赏
  • 举报
回复
失败了, 返回的错误码是什么? GetLastError() = ?
cenchure 2007-02-06
  • 打赏
  • 举报
回复
DIGCF_PRESENT 用这个可以找到当前ACTIVE 的设备,不过XP和XP 以下版本 好像有点问题,所以最好 是枚举 设备 比较 DEVICEID , 这样找到第设备才正确。
如果设备 不正确 可能 你write file 就会出错 。
cyuan5 2007-02-06
  • 打赏
  • 举报
回复
VB调用DLL时,同样在CreatFile的地方失败! VB调用该函数返回失败!!!!

BOOL HID_GetName(int num, char *buf, int sz) {
HANDLE DevHandle;
WCHAR wbuf[128];
int i;
BOOL ok;

if (DevDetailData[num] == NULL) return (FALSE);

/* Create File for Device Read/Write */
DevHandle = CreateFile(DevDetailData[num]->DevicePath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
(LPSECURITY_ATTRIBUTES)NULL,
OPEN_EXISTING,
0,
NULL
);

if (DevHandle == INVALID_HANDLE_VALUE) return (FALSE);

ok = HidD_GetProductString(DevHandle, wbuf, sizeof(wbuf));

if (ok) {
for (i = 0; i < sz; i++) {
*buf++ = (char)wbuf[i];
}
}

CloseHandle (DevHandle);

return (ok);
}
cyuan5 2007-02-06
  • 打赏
  • 举报
回复
谢谢要在LINK上加上 hid.lib setupapi.lib 就OK
crumpy 2007-02-05
  • 打赏
  • 举报
回复
是不是DLL工程中没有加入setupapi的导入库呀?

在你的.h头文件中加入: #pragma comment(lib, "setupapi.lib");试试
cyuan5 2007-02-05
  • 打赏
  • 举报
回复
HIDk.obj : error LNK2001: unresolved external symbol __imp__SetupDiDestroyDeviceInfoList@4
HIDk.obj : error LNK2001: unresolved external symbol _HidP_GetCaps@8
HIDk.obj : error LNK2001: unresolved external symbol _HidD_GetPreparsedData@8
HIDk.obj : error LNK2001: unresolved external symbol __imp__SetupDiGetDeviceInterfaceDetailA@24
HIDk.obj : error LNK2001: unresolved external symbol __imp__SetupDiEnumDeviceInterfaces@20
HIDk.obj : error LNK2001: unresolved external symbol __imp__SetupDiGetClassDevsA@16
HIDk.obj : error LNK2001: unresolved external symbol _HidD_GetHidGuid@4
HIDk.obj : error LNK2001: unresolved external symbol _HidD_GetProductString@12
Debug/HID_DLL.dll : fatal error LNK1120: 8 unresolved externals
ouyh12345 2007-02-05
  • 打赏
  • 举报
回复
出什么错?

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧