在dll中的函数为:int  Startup(int port,int interval)
                int WINAPI Close();我的调用dll源代码:
int (* StartServer) (int, int) = NULL;
HINSTANCE hinstance = NULL;
hinstance = LoadLibrary("theDLL.dll");
StartServer = (int (*) (int, int)) GetProcAddress(hinstance, "Startup"); 
(*lpfnStartServer)(1, 20);我可以得到该函数的地址,但是调用(*lpfnStartServer)(1, 20)时出错。而且我得到的dll函数Startup和Close的地址是一样的(得到Close函数地址的代码没有给出)。请大家指点,谢谢啦。

解决方案 »

  1.   

    (*lpfnStartServer)(1, 20);应该是lpfnStartServer(1, 20);吧
      

  2.   

    1.得到的startserver指针是否为null,如果是就看看函数错了没有
    2.dll中的函数声明是否这样
    int WINAPI Startup(int port,int interval);
    如果是的话调用端也应该这样声明
      

  3.   

    1.得到的startserver指针是否为null,如果是就看看函数错了没有
    2.dll中的函数声明是否这样
    int WINAPI Startup(int port,int interval);
    如果是的话调用端也应该这样声明
      

  4.   

    將上面代碼改成以下試試:
    typedef   int (*StartServer)(int,int);
    HINSTANCE hInst = ::LoadLibrary("theDLL.dll");
    StartServer StartServerFun=NULL;
    StartServerFun= (StartServer)GetProAddress(hInst,"Startup"); 
    int nResult=StartServerFun(1,20); 
      

  5.   

    谢谢楼上,可还是不行啊。startserver不为空,不论取哪个函数都是0x10001430这个地址。
      

  6.   

    用delphi可以正确调用该dll里的函数,是不是这个dll申明的函数vc用不成呀。
      

  7.   

    你在def文件里看EXPORTS项下面是否已经有引用的函数。也可看MSDN帮助
      

  8.   

    问题解决了,函数应该是int WINAPI Startup(int port,int interval)
    所以声明的函数指针:typedef   int (WINAPI *StartServer)(int,int);就对了,谢谢大家了。
      

  9.   

    怎么发不成贴字了?问题解决了,函数声明应该是int WINAPI Startup(int port,int interval)
    所以声明函数指针 typedef int (WINAPI *StartServer)(int,int);就可以了
    谢谢大家了。