Project1
标题:
怎么我写的dll rm调用就game.exe出错呢
[打印本页]
作者:
secondsen
时间:
2009-11-17 23:06
标题:
怎么我写的dll rm调用就game.exe出错呢
本帖最后由 secondsen 于 2009-11-18 08:54 编辑
RM
a = Win32API.new("Bin.dll", "aaa", nil, 'p')
p a.call
复制代码
dll
extern char __stdcall aaa(void)
{
char a[] = "abc";
char *p = a;
return *p;
}
复制代码
作者:
紫苏
时间:
2009-11-18 01:11
1、你到底是要返回一个字符串指针还是要返回一个字符?前者是 char *,后者是 char,而你在 DLL 中返回的是 *p,也就是 char 类型;如果要返回字符串的话,直接返回 a 就行了
2、指针 p 指向的是一个局部数组 a,而这个数组在 aaa 调用结束时生命周期就会结束(因为是存在栈中的,函数出栈时就会被清空),之后你的指针就不知道指向什么奇怪的地方了,所以你在 RM 引用这个指针指向的地址就可能会发生未知的分段错误
要么用 static 修饰 a,使其变为静态存储的变量;要么用全局变量;要么用 new 在堆中分配空间,然后不用数据的时候再 delete 掉
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1