黄福寿 发表于 2023-5-29 21:22:50

调用dll问题

.版本 2

.DLL命令 Disasm, 整数型, "BeaEngine.dll", "_Disasm@4"
    .参数 Disasm, Disasm


大佬们,请问下易语言这种dll定义方法,在火山里面怎么写啊,输出名不支持_Disasm@4这样的字符,有没有大佬能写个例子参考下

server 发表于 2023-5-29 22:17:20

<火山程序 类型 = "通常" 版本 = 1 />

方法 "//Disasm" <类型 = 整数 "">
参数 Disasm <类型 = 变整数>
{
    变量 apiaddr <类型 = 变整数 值 = 0>
    变量 ret <类型 = 整数 值 = 0>
    apiaddr = _取函数地址W (_装载DLLW ("BeaEngine.dll"), "_Disasm@4")
    如果 (apiaddr != 0)
    {
      ret = call.Std (apiaddr, 整数, Disasm)
    }
    返回(ret)
}

黄福寿 发表于 2023-5-29 23:28:43

server 发表于 2023-5-29 22:17
方法 "//Disasm"
参数 Disasm
{


这种方法试过了,直接崩溃,LoadLibrary获得句柄,GetProcAddress获得地址,但是结构类传不进去,退出码为0xC0000005

server 发表于 2023-5-30 17:40:08

黄福寿 发表于 2023-5-29 23:28
这种方法试过了,直接崩溃,LoadLibrary获得句柄,GetProcAddress获得地址,但是结构类传不进去,退出码 ...

结构类用 结构基础类取指针方法。

嫌麻烦,可以直接使用   取变量地址(结构.第一个参数) 传入

黄福寿 发表于 2023-5-30 20:42:07

server 发表于 2023-5-30 17:40
结构类用 结构基础类取指针方法。

嫌麻烦,可以直接使用   取变量地址(结构.第一个参数) 传入 ...

没有用,直接崩溃

server 发表于 2023-5-30 23:32:57

无缘无真相

飞扬工作室 发表于 2023-6-9 14:15:37

已经修正(请注意下一个更新包),可以采用类似以下格式:

<火山程序 类型 = "通常" 版本 = 1 />

方法 我的测试方法2 <公开 静态 @视窗.输入 = "BeaEngine.dll?_Disasm@4">
{

}

"@视窗.输入"的具体属性格式为:
如果所输入文件为动态链接库且欲使用序号或直接指定方式来输入其中函数,则属性值应该为"所输入DLL文件名 + ? + 所输入函数序号值/所输入函数名称"格式(此处的"所输入函数名称"不必须为有效名称文本);

折戟沉沙 发表于 2023-6-9 18:58:42

飞扬工作室 发表于 2023-6-9 14:15
已经修正(请注意下一个更新包),可以采用类似以下格式:




@视窗.输出,是否也支持修饰符?
页: [1]
查看完整版本: 调用dll问题