查看: 1647|回复: 1

[已经解决] 怎么我写的dll rm调用就game.exe出错呢

  [复制链接]
梦石
0
星屑
60
在线时间
61 小时
注册时间
2006-9-15
回帖
864
发表于 2009-11-17 23:06:51 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 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. }
复制代码
梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
回帖
1912
发表于 2009-11-18 01:11:50 | 显示全部楼层
1、你到底是要返回一个字符串指针还是要返回一个字符?前者是 char *,后者是 char,而你在 DLL 中返回的是 *p,也就是 char 类型;如果要返回字符串的话,直接返回 a 就行了
2、指针 p 指向的是一个局部数组 a,而这个数组在 aaa 调用结束时生命周期就会结束(因为是存在栈中的,函数出栈时就会被清空),之后你的指针就不知道指向什么奇怪的地方了,所以你在 RM 引用这个指针指向的地址就可能会发生未知的分段错误
要么用 static 修饰 a,使其变为静态存储的变量;要么用全局变量;要么用 new 在堆中分配空间,然后不用数据的时候再 delete 掉
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部