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

Project1

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

[已经解决] dll 调用 类中的方法 报错了啊

 关闭 [复制链接]

Lv1.梦旅人

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

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

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

x
组建 dll  组建不了。。。报错

    RGSSEval = (int (*)(void))GetProcAddress(hModule, "RGSSEval");

这一句
error C2197: 'int (__cdecl *)(void)' : too many actual parameters
执行 cl.exe 时出错.


这是咋回事啊?

Lv1.梦旅人

炎发灼眼的讨伐者

梦石
0
星屑
50
在线时间
1707 小时
注册时间
2007-8-4
帖子
904
2
发表于 2009-10-27 08:18:03 | 只看该作者
RGSSEval应该为  int (*)(const char*) 不是 int (*)(void)~~~

评分

参与人数 1星屑 +200 收起 理由
DeathKing + 200 认可答案

查看全部评分

RMXP&RMVX通用Web化完成- -|||
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
61 小时
注册时间
2006-9-15
帖子
946
3
 楼主| 发表于 2009-10-27 08:53:04 | 只看该作者
晚上回家试试去,谢谢,太感谢了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
61 小时
注册时间
2006-9-15
帖子
946
4
 楼主| 发表于 2009-10-27 23:49:27 | 只看该作者
RGSSEval = (int (*)(const char*) )GetProcAddress(hModule, "RGSSEval");
    *RGSSEval("p 1");
这两行。。


C:\Documents and Settings\second\桌面\Bin\Bin.cpp(28) : error C2440: '=' : cannot convert from 'int (__cdecl *)(const char *)' to 'int (__cdecl *)(void)'
        This conversion requires a reinterpret_cast, a C-style cast or function-style cast
C:\Documents and Settings\second\桌面\Bin\Bin.cpp(29) : error C2197: 'int (__cdecl *)(void)' : too many actual parameters
执行 cl.exe 时出错.

这是咋回事阿?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
5
发表于 2009-10-28 01:06:56 | 只看该作者
掩面钻地,还好夏娜大人指出了……
应该是:
  1. int (*RGSSEval)(const char*);
  2. RGSSEval = (int (*)(const char*))GetProcAddress(hModule, "RGSSEval");
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
61 小时
注册时间
2006-9-15
帖子
946
6
 楼主| 发表于 2009-10-28 01:22:11 | 只看该作者
报告!  *RGSSEval("p 1");    这个又报错了

C:\Documents and Settings\second\桌面\Bin\Bin.cpp(29) : error C2100: illegal indirection
执行 cl.exe 时出错.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
7
发表于 2009-10-28 01:53:37 | 只看该作者
星号去掉……我函数指针用得太少了,抱歉啊~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
61 小时
注册时间
2006-9-15
帖子
946
8
 楼主| 发表于 2009-10-28 08:58:51 | 只看该作者
本帖最后由 secondsen 于 2009-10-28 09:03 编辑

这个。。用得少没啥,我还从来不用呢。。。。能解决问题就可以:lol

这是Bin.def的
  1. LIBRARY Bin
  2. EXPORTS
  3. RGSS        @1
复制代码
这是Bin.cpp的
  1. // Bin.cpp : Defines the entry point for the DLL application.
  2. //

  3. #include "stdafx.h"

  4. BOOL APIENTRY DllMain( HANDLE hModule,
  5.                        DWORD  ul_reason_for_call,
  6.                        LPVOID lpReserved
  7.                                          )
  8. {
  9.     return TRUE;
  10. }

  11. extern void __stdcall RGSS(void)
  12. {
  13.     HMODULE hModule = LoadLibrary("RGSS****.dll");
  14.         int (*RGSSEval)(const char*);
  15.     RGSSEval = (int (*)(const char*))GetProcAddress(hModule, "RGSSEval");
  16.     RGSSEval("p 1");

  17. }
复制代码
组建dll没有问题  Bin.dll - 0 error(s), 0 warning(s)

但是。。。调用的时候有问题了。。。
RGSS中调用
  1. RGSS = Win32API.new('Bin.dll','RGSS',nil,nil)
  2. RGSS.call
  3. exit
复制代码
但是运行的时候

game.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉。       (Game.exe的图标)

XXXXXX
要查看这个错误报包含的数据,请点击这里。
调试           发送错误报告    不发送

我点了那个查看报告的

错误签名
AppName : game.exe       AppVer: 2.0.0.1       ModName:unknown
ModVer:0.0.0.0        Offset:00000000
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
9
发表于 2009-10-28 09:06:03 | 只看该作者
HMODULE hModule = LoadLibrary("RGSS****.dll");

我用通配符表示文件名那里是因为这个 DLL 的文件名随 RM 的版本不同而不同,比如我用的 RMXP 1.02 就是 RGSS102J.DLL,你可以自己去 System32 下看看……

评分

参与人数 1星屑 +400 收起 理由
DeathKing + 400 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
61 小时
注册时间
2006-9-15
帖子
946
10
 楼主| 发表于 2009-10-28 10:17:27 | 只看该作者
我忘记盖了,还问出这么个问题。。OTZ,谢谢LS!!!!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-12 06:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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