设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1436|回复: 1
打印 上一主题 下一主题

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

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
61 小时
注册时间
2006-9-15
帖子
946
跳转到指定楼层
1
发表于 2009-11-17 23:06:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 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. }
复制代码

Lv1.梦旅人

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

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-27 11:32

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表