用vc调用一个dll中的函数,通过GetProcAddress获得函数指针,然后传入参数,编译后出现error c2197:'int(_stdcall *)(void)':too many actual parameters,觉得是参数不对,可就算一个参数不给仍然出现同样错误。
希望各位高手赐教!!
马上给分!!!

解决方案 »

  1.   

    此函数有2个参数,第一个参数是LoadLibrary的返回值,第二个参数是你所要的函数的名字,是个字符串,"……"格式。你看看是不是函数名打错了,而且有大小写区别的!
      

  2.   

    GetProcAddress(hdll,"GetSysInfo");是没错的!
    函数原型为DWORD GetSysInfo(int nPort,LPVOID lpBuffer);
    lpBuffer为缓冲区,nPort为串口
      

  3.   

    MARK IT TOO ...对了,可有高手懂如何在MESSAGEBOX中输出一个DOUBLE变量值
      

  4.   

    我想应该是你用来接收GetProcAddress()返回结果的函数指针定义有问题。To lanyd:
    CString cs;
    double dbl;
    cs.Format("%f", dbl);
    MessageBox(cs....);
    (只是个大概)
      

  5.   

    他说的是实参的个数过多,你检查一下dll 的.h .cpp和调用时的函数指针的定义,看看是否匹配
      

  6.   

    和dll.h中的函数原型是一模一样的,
    debug状态下,可以看到已经得到函数的入口地址!
      

  7.   

    哈哈,是Cpp文件吧。这样用:
    typedef DWORD (*PGetSysInfo)(int nPort,LPVOID lpBuffer);##如果你的函数有WINAPI的话就
    ##  typedef DWORD (WINAPI *PGetSysInfo)(int nPort,LPVOID lpBuffer);
    ## 必须和定义一致,否则有错误PGetSysInfo pFun = (PGetSysInfo)GetProcAddress(...);
    pFun(nPort, lpBuffer);你直接用FARPROC是没有用的。
    你是不是这样:
    FARPROC pFun = GetProcAddress(...);
    pFun(nPort, lpBuffer);
      

  8.   

    劳驾贴出你的程序,猜来猜去很烦的,要么你发到[email protected]我看看
      

  9.   

    TO: zzh5335(非程序员) 谢谢你的帮助,不过,我在DLL用CSTRING它提示我该对象不存在!
      

  10.   

    请问是如何解决的呀,现在我也碰到这个问题的:((可真的是像VERYBIGBUG说的一样???
      

  11.   

    TO: zzh5335(非程序员) 我已经知道用什么方法了:)
    先用SPRINTF格式化字符串再MESSAGEOBX即可