printf("%d\n",ptest(0x283));
改成
printf("%d\n",(*ptest)(0x283));
              ~~~~~这个应该是函数指针吧,试试看

解决方案 »

  1.   

    问题肯定是在ptest(0x283)这个函数上,是DLL上出了问题,肯定是参数输入上的问题,但是到底是什么问题啊?
      

  2.   

    UINT getport=_inp(port);
    return getport;你DLL中用到了运行时端口操作函数,如果在95与98中不会有问题,在2K下就会非法操作,就知道这些,没在2K下做过操作端口的程序,你可以搜索一下以前别人问的相关2K下操作端口问题
      

  3.   

    我就是在98下操作端口啊,问题就是在传参数给DLL的函数上面,其他都是正常的。
      

  4.   

    在GetProcAddress之后检测如果为NULL,则return,不要只printf_err查看你生成的DLL中导出函数应是用DEF文件导出的,这样生成DLL时才不会在函数名前加下划线,函数名后加@跟上参数总长度。这样使用GetProcAddress才会得到正确的函数地址不知是否有不用DEF文件生成的办法,我用
    extern "C" __declspec(dllexport) UINT WINAPI display(UINT port)
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    UINT getport=_inp(port);
    return getport;
    }
    试声明了一下,发现函数名被VC改变了
    水平有限,如错望大侠指正
      

  5.   

    问题找到了,就是WINAPI的问题,呵呵,不该用它的。