Project1

标题: dll 调用 类中的方法 报错了啊 [打印本页]

作者: secondsen    时间: 2009-10-27 07:51
标题: dll 调用 类中的方法 报错了啊
组建 dll  组建不了。。。报错

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

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


这是咋回事啊?
作者: 灼眼的夏娜    时间: 2009-10-27 08:18
RGSSEval应该为  int (*)(const char*) 不是 int (*)(void)~~~
作者: secondsen    时间: 2009-10-27 08:53
晚上回家试试去,谢谢,太感谢了
作者: secondsen    时间: 2009-10-27 23:49
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 时出错.

这是咋回事阿?
作者: 紫苏    时间: 2009-10-28 01:06
掩面钻地,还好夏娜大人指出了……
应该是:
  1. int (*RGSSEval)(const char*);
  2. RGSSEval = (int (*)(const char*))GetProcAddress(hModule, "RGSSEval");
复制代码

作者: secondsen    时间: 2009-10-28 01:22
报告!  *RGSSEval("p 1");    这个又报错了

C:\Documents and Settings\second\桌面\Bin\Bin.cpp(29) : error C2100: illegal indirection
执行 cl.exe 时出错.
作者: 紫苏    时间: 2009-10-28 01:53
星号去掉……我函数指针用得太少了,抱歉啊~
作者: secondsen    时间: 2009-10-28 08:58
本帖最后由 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
作者: 紫苏    时间: 2009-10-28 09:06
HMODULE hModule = LoadLibrary("RGSS****.dll");

我用通配符表示文件名那里是因为这个 DLL 的文件名随 RM 的版本不同而不同,比如我用的 RMXP 1.02 就是 RGSS102J.DLL,你可以自己去 System32 下看看……
作者: secondsen    时间: 2009-10-28 10:17
我忘记盖了,还问出这么个问题。。OTZ,谢谢LS!!!!




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1