查看: 2839|回复: 9

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

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

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

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

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

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

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


这是咋回事啊?

炎发灼眼的讨伐

梦石
0
星屑
50
在线时间
1707 小时
注册时间
2007-8-4
回帖
894
发表于 2009-10-27 08:18:03 | 显示全部楼层
RGSSEval应该为  int (*)(const char*) 不是 int (*)(void)~~~

评分

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

查看全部评分

RMXP&RMVX通用Web化完成- -|||
回复

使用道具 举报

梦石
0
星屑
60
在线时间
61 小时
注册时间
2006-9-15
回帖
864
 楼主| 发表于 2009-10-27 08:53:04 | 显示全部楼层
晚上回家试试去,谢谢,太感谢了
回复

使用道具 举报

梦石
0
星屑
60
在线时间
61 小时
注册时间
2006-9-15
回帖
864
 楼主| 发表于 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 时出错.

这是咋回事阿?
回复

使用道具 举报

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

使用道具 举报

梦石
0
星屑
60
在线时间
61 小时
注册时间
2006-9-15
回帖
864
 楼主| 发表于 2009-10-28 01:22:11 | 显示全部楼层
报告!  *RGSSEval("p 1");    这个又报错了

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

使用道具 举报

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
回帖
1912
发表于 2009-10-28 01:53:37 | 显示全部楼层
星号去掉……我函数指针用得太少了,抱歉啊~
回复

使用道具 举报

梦石
0
星屑
60
在线时间
61 小时
注册时间
2006-9-15
回帖
864
 楼主| 发表于 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
回复

使用道具 举报

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
回帖
1912
发表于 2009-10-28 09:06:03 | 显示全部楼层
HMODULE hModule = LoadLibrary("RGSS****.dll");

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

评分

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

查看全部评分

回复

使用道具 举报

梦石
0
星屑
60
在线时间
61 小时
注册时间
2006-9-15
回帖
864
 楼主| 发表于 2009-10-28 10:17:27 | 显示全部楼层
我忘记盖了,还问出这么个问题。。OTZ,谢谢LS!!!!
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部