TC官方合作论坛

 找回密码
 立即注册
查看: 996|回复: 4

[已解决] dllcall如何传递NULL字符串

[复制链接]
发表于 2015-12-25 10:27:32 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
比如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-26 20:38:40 | 显示全部楼层
我假设你用的是 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
复制代码
回复 支持 反对

使用道具 举报

发表于 2015-12-25 12:09:57 | 显示全部楼层
.....
回复

使用道具 举报

 楼主| 发表于 2015-12-28 08:42:57 | 显示全部楼层
sam7894604 发表于 2015-12-26 20:38
我假设你用的是 TC 5 ...
事实上封装下即可...


感谢提供思路.

不过我感觉TC对于API调用的设计还是有问题,明明可以用pwchar *去传递null,还可以用int去传递常数字符串的地址,可惜TC偏偏没有这么做,导致调用还是不太方便
回复 支持 反对

使用道具 举报

发表于 2015-12-28 19:00:47 | 显示全部楼层
seemk 发表于 2015-12-28 08:42
感谢提供思路.

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

这个是可以建议
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-9-28 19:39 , Processed in 0.053054 second(s), 23 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表