免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: iamlimeng
打印 上一主题 下一主题

调用外部DLL获取硬盘ID [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-05-15 11:47 |只看该作者
回复 8# dugu072_cu


这样就基本正确了,只有ControlNum没有数据,其他都正确了,但如果改为:
  1. Win32::API::Struct->typedef('MYTYPE', qw(
  2.         char ModelNumber[40];
  3.         char SerialNumber[20];
  4.         char Dump[1];
  5.         char ControlNum[7];
  6.         DWORD DriveType;
  7.         DWORD Cylinders;
  8.         DWORD Heads;
  9.         DWORD Sectors;
  10. ));
复制代码
ControlNum能正确显示一部分,不全。

但这样我就非常满意了,非常感谢!

论坛徽章:
0
12 [报告]
发表于 2010-05-15 12:01 |只看该作者
确实只看了一些  embedded c 的东西,没有深入下去,我看到例子,xs 扩展的时候,都是需要 xsubpp 编译为 c 后,而c编译器,将c文件编译为dll的,perl所谓的直接调用,还是要自己写很多 xs 的东西,虽然 h2xs 可以帮着做很多活儿,但毕竟使用起来十分麻烦,所以我不认为 perl 是直接调用 dll 的

当然“但 xs 要求你有 dll 的源码”这句确实是推测,毕竟最终xs还是要用c的,c确实可以直接用dll,这个过程,我并不熟悉,也许可以不用dll源码,flw大大能否指点下?

论坛徽章:
0
13 [报告]
发表于 2010-05-15 12:32 |只看该作者
回复 9# redskywy


内容确实都在$p->{buffer}中,不知道有没有可能用PERL直接对$p->{buffer}解码。

我看了,前三个参数对应的数据,似乎不需要解码,后面的DWORD定义的几个数据,不能直接阅读。

论坛徽章:
0
14 [报告]
发表于 2010-05-15 21:14 |只看该作者
回复 13# iamlimeng
  1. $buf = $p->{buffer};
  2. @struct = unpack('A40A20A8LLLL', $buf);
复制代码
数组里面的就是结构体中对应的成员
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP