Project1

标题: 怎么我写的dll rm调用就game.exe出错呢 [打印本页]

作者: secondsen    时间: 2009-11-17 23:06
标题: 怎么我写的dll rm调用就game.exe出错呢
本帖最后由 secondsen 于 2009-11-18 08:54 编辑

RM
  1. a = Win32API.new("Bin.dll", "aaa", nil, 'p')
  2. p a.call
复制代码
dll
  1. extern char __stdcall aaa(void)
  2. {
  3.         char a[] = "abc";
  4.         char *p = a;
  5.         return *p;
  6. }
复制代码

作者: 紫苏    时间: 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