admin 发表于 2021-1-8 13:51:37

易语言动态调用dll函数源码

直接看代码:
.版本 2
.支持库 spec

.程序集 窗口程序集_启动窗口

.子程序 __启动窗口_创建完毕

' 与DLL进行通信
' 1、调用DLL里面的方法资源
' 2、传递一些参数到DLL

.子程序 _按钮1_被单击
.局部变量 hadress, 整数型
.局部变量 返回值
.局部变量 Dhwnd

Dhwnd = LoadLibraryA (取运行目录 () + “\dll.dll”)
.如果真 (Dhwnd = 0)
    信息框 (“加载DLL失败”, 0, , )
    返回 ()
.如果真结束
调试输出 (Dhwnd)

hadress = GetProcAddress (Dhwnd, “add”)
.如果真 (hadress = 0)
    信息框 (“获取接口地址失败”, 0, , )
    返回 ()
.如果真结束

调试输出 (hadress)
' 怎么样来执行这个 add函数方法???
' 调用子程序()
.如果真 (调用子程序 (hadress, , 返回值, 到整数 (编辑框1.内容), 到整数 (编辑框2.内容)))
    信息框 (返回值, 0, , )
.如果真结束

FreeLibrary (Dhwnd)

.子程序 _按钮2_被单击
.局部变量 hadress, 整数型
.局部变量 返回值
.局部变量 Dhwnd

Dhwnd = LoadLibraryA (取运行目录 () + “\dll.dll”)
.如果真 (Dhwnd = 0)
    信息框 (“加载DLL失败”, 0, , )
    返回 ()
.如果真结束

调试输出 (Dhwnd)

hadress = GetProcAddress (Dhwnd, “sub”)
.如果真 (hadress = 0)
    信息框 (“获取接口地址失败”, 0, , )
    返回 ()
.如果真结束

调试输出 (hadress)
' 怎么样来执行这个 add函数方法???
' 调用子程序()
调用子程序 (hadress, , 返回值, 到整数 (编辑框1.内容), 到整数 (编辑框2.内容))
信息框 (返回值, 0, , )
FreeLibrary (Dhwnd)



用到的dll命令:
.版本 2

.DLL命令 LoadLibraryA, 整数型, "kernel32", "LoadLibraryA", , 指定的可执行模块映射到调用进程的地址空间
    .参数 lpLibFileName, 文本型, , 一个空终止字符串名称可执行模块的指针(一个DLL或EXE文件。。)。指定的名称是模块的文件名不是存储在库模块的名字本身相关,通过在模块定义图书馆关键字指定(DEF文件。)

.DLL命令 GetProcAddress, 整数型, "kernel32", "GetProcAddress", , 从指定的动态链接库中检索一个导出的函数或变量的地址
    .参数 模块句柄, 整数型, , 用LoadLibrary或getmodulehandle函数返回的句柄
    .参数 函数名称, 文本型, , 函数名称

.DLL命令 FreeLibrary, 逻辑型, "kernel32.dll", "FreeLibrary", , 释放指定的动态链接库,它们早先是用LoadLibrary API函数装载的,真 表示成功,假 表示失败。
    .参数 hLibModule, 整数型, , 要释放的一个库句柄



test111 发表于 2021-2-4 14:14:43

这个非常好啊{:5_382:}{:5_382:}{:5_382:}
页: [1]
查看完整版本: 易语言动态调用dll函数源码