易语言线程调用注入DLL函数载入窗口

DLL写法1

.版本 2
.支持库 EThread
 
.程序集 程序集1
 
.子程序 _启动子程序, 整数型, , 请在本子程序中放置动态链接库初始化代码
 
启动线程 (&dll_windeow, , )
_临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
返回 (0)  ' 返回值被忽略。
 
.子程序 _临时子程序
 
' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
 
.子程序 dll_windeow, , 公开, 在这个函数里写代码!
 
载入 (窗口1, , 真)

这种写法,必须这样调用,这样会自动加载窗口1

dll句柄 = LoadLibraryA (编辑框2.内容)

DLL写法2

我们借助第三方模块,实现窗口消息循环。这里调用了“黑月界面类插件”中的 黑月消息循环

.版本 2
 
.程序集 程序集1
 
.子程序 _启动子程序, 整数型, , 请在本子程序中放置动态链接库初始化代码
 
 
_临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
返回 (0)  ' 返回值被忽略。
 
.子程序 _临时子程序
 
' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
 
 
.子程序 Show_Dialog, , 公开
 
载入 (窗口1, , 假)
黑月消息循环 (窗口1.取窗口句柄 ())

这样随便调用,不至于线程调用,都能轻松载入窗口1

DLL写法3

采用子程序指针循环

.版本 2
 
.程序集 程序集1
.程序集变量 集_子程序指针, 子程序指针
 
.子程序 _启动子程序, 整数型, , 请在本子程序中放置动态链接库初始化代码
 
' ’启动线程 (&hd, , )
_临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
返回 (0)  ' 返回值被忽略。
 
.子程序 _临时子程序
 
' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
 
.子程序 hd, , 公开, 这段代码请不要改动!
.参数 子程序指针, 子程序指针
 
集_子程序指针 = 子程序指针
载入 (窗口1, ,)

外部线程调用源码

.版本 2
.支持库 spec
.支持库 EThread
 
.子程序 _按钮2_被单击
.局部变量 函数地址
.局部变量 地址
.局部变量 线程句柄, 整数型
.局部变量 线程ID, 整数型
 
' 取得DLL函数地址
函数地址 = GetProcAddress (dll句柄, 编辑框3.内容)
' 申请内存地址以便存放参数
地址 = 申请内存 (取文本长度 (编辑框3.内容), )
' ’把参数写到内存
写到内存 (编辑框3.内容, 地址, )
' 可以用远程线程调用已注入其它程序DLL的函数
线程句柄 = CreateThread (0, 0, 函数地址, 地址, 0, 线程ID)
调试输出 (线程句柄)
 
.如果真 (等待线程 (线程句柄, 100))
    关闭线程句柄 (线程句柄)
    释放内存 (地址)
 
.如果真结束
 
.子程序 _按钮3_被单击
 
.如果真 (FreeLibrary (dll句柄)0)
    dll句柄 = 0
.如果真结束
 
.子程序 _按钮4_被单击
 
dll句柄 = LoadLibraryA (编辑框2.内容)
.如果真 (dll句柄 < 1)
    信息框 (“载入DLL失败”, 48, “提示”)
    返回 ()

发布日期:

所属分类: 易语言 标签: