易语言DLL制作调用线程调用DLL函数并传参数

DLL函数源码:

  1. .版本 2
  2.  
  3. .子程序 子程序1, , 公开
  4. .参数 整数, 整数型
  5. .局部变量 文本, 文本型
  6.  
  7. 文本 = 指针到文本 (整数)
  8. 信息框 (“外部线程调用我” + 文本, 64, “DLL内部函数”, )

易语言调用DLL步骤及源码:

LoadLibraryA获取DLL句柄

  1. .版本 2
  2.  
  3. dll句柄 = LoadLibraryA (取运行目录 () + “\321.dll”)
  4. .如果真 (dll句柄 ≤ 0)
  5.     信息框 (“载人DLL 失败!”, 48, “警告”, )
  6.     返回 ()
  7. .如果真结束
  8.  
  9. 编辑框1.内容 = “Dll句柄:” + 到文本 (dll句柄)

GetProcAddress来获取函数地址,GetProcAddress调用

  1. .版本 2
  2. .支持库 spec
  3. .支持库 EThread
  4.  
  5. .局部变量 函数地址, 整数型
  6. .局部变量 内存地址, 整数型
  7. .局部变量 线程句柄, 整数型
  8. .局部变量 线程ID, 整数型
  9.  
  10. .如果真 (dll句柄 ≤ 0)
  11.     信息框 (“请先载人DLL”, 48, “警告”, )
  12.     返回 ()
  13. .如果真结束
  14.  
  15. 函数地址 = GetProcAddress (dll句柄, “子程序1)
  16. ' 申请内存地址用了存放参数.调用完之后必须释放内存
  17. 内存地址 = 申请内存 (取文本长度 (编辑框1.内容), )
  18. ' 把DLL里的函数参数写入地址
  19. 写到内存 (编辑框1.内容, 内存地址, )
  20. ' 使用远程线程调用DLL里或者其他进程里的注入的DLL里的函数
  21. 线程句柄 = CreateThread (0, 0, 函数地址, 内存地址, 0, 线程ID)
  22. .如果真 (等待线程 (线程句柄, ))
  23.     FreeLibrary (线程句柄)
  24.     释放内存 (内存地址)

FreeLibrary释放DLL

  1. .版本 2
  2.  
  3. .如果真 (FreeLibrary (dll句柄)0)
  4.     dll句柄 = 0
  5. .如果真结束

教程下载:


发布日期:

所属分类: 易语言 标签: