TC官方合作论坛

标题: dllcall如何传递NULL字符串 [打印本页]

作者: seemk    时间: 2015-12-25 10:27
标题: dllcall如何传递NULL字符串
比如GetModuleHandle这个API函数,可以获取相应模块的句柄,比如GetModuleHandle("user32")就能获取user32模块的句柄
如果参数是NULL,那么可以获取应用程序自身的句柄.
但是在tc里如果用"wchar *"去定义这个参数类型,是无法传递NULL的:
dllcall("kernel32.dll","int","GetModuleHandleW","wchar *",null)永远返回0
而用"int"去传递则可以正确获取到:
dllcall("kernel32.dll","int","GetModuleHandleW","int",0)

难道TC只能用这种方法去妥协这个问题吗?




作者: 如此美丽。    时间: 2015-12-25 12:09
.....
作者: sam7894604    时间: 2015-12-26 20:38
我假设你用的是 TC 5 ...
事实上封装下即可...

  1. function GetModuleHandle(lpModuleName)
  2.     var 局_指针
  3.     if(isstring(lpModuleName))
  4.         局_指针 = varaddress(lpModuleName)
  5.     else
  6.         局_指针 = null
  7.     end
  8.     return dllcall("kernel32.dll","long","GetModuleHandleW","long",局_指针)
  9. end
复制代码

作者: seemk    时间: 2015-12-28 08:42
sam7894604 发表于 2015-12-26 20:38
我假设你用的是 TC 5 ...
事实上封装下即可...


感谢提供思路.

不过我感觉TC对于API调用的设计还是有问题,明明可以用pwchar *去传递null,还可以用int去传递常数字符串的地址,可惜TC偏偏没有这么做,导致调用还是不太方便
作者: sam7894604    时间: 2015-12-28 19:00
seemk 发表于 2015-12-28 08:42
感谢提供思路.

不过我感觉TC对于API调用的设计还是有问题,明明可以用pwchar *去传递null,还可以用int去 ...

这个是可以建议




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1