这段代码来自:
http://support.microsoft.com/default.aspx?scid=kb;zh-cn;117428#appliestotypedef void (CALLBACK *ULPRET)(UINT,LPINT);void func1(void)
{
   HINSTANCE       hLib;
   ULPRET          lpfnDLLProc;
   UINT            param1 = 1;
   int             param2;   hLib = LoadLibrary ("dll1.dll");
   if (hLib)
   {
      lpfnDLLProc = (ULPRET) GetProcAddress (hLib,"DLLProc");
      (*lpfnDLLProc) (param1, (LPINT)&param2);//这句不懂。。
      FreeLibrary (hLib);
   }
}请问大家,我注释的那句什么意思?
是不是定义被掉函数的参数形式?
param1,param2分别干什么的?
我有个测试的函数:
int DLLProc(int i)
{
   return i+1;
}
请问这个函数没有问题吧,
如果没问题的话,我不懂的那句该怎么改?
我直接没改,测试了一下,VS2005的
结果出错:Run-Time Check Failure #0......感谢大家帮个忙,谢谢了!!!

解决方案 »

  1.   

    补充一下:
    那个测试的函数已经生成DLL了,放在了新项目的目录下
    去掉我注释的那一句编译没有问题
      

  2.   

    (*lpfnDLLProc) (param1, (LPINT)&param2); //执行dll中的函数dllproc
      

  3.   

    lpfnDLLProc是你获取的被调用函数的地址,
     (*lpfnDLLProc) (param1, (LPINT)&param2);就是调用这个函数,建议看看C语言的指针部分.
      

  4.   

    谢谢两位的回复,但是我的问题还没解决
    我知道lpfnDLLProc就是函数的指针
    也知道(*lpfnDLLProc) (param1, (LPINT)&param2) 就是执行被调用的函数
    但是我对其中的参数有点疑惑
    为什么要传UINT型的param1、为什么又要把int型的param2取址并转换为LPINT型?
    如果说是原函数需要的话
    那,这样的原函数
    int DLLProc(int i)
    {
       return i+1;
    }
    是不是应该写:(*lpfnDLLProc) (param2);//int param2
    但是不正确啊
    哪位大虾帮忙就上面这个最简单的函数写个调用,谢谢了!!!
    (*lpfnDLLProc) (/* 这里怎么写,谢谢了!*/ );
      

  5.   

    问题解决了!
    应该这样写:param2=(*lpfnDLLProc) (param2);//int param2最主要的问题是前面定义写错了
    typedef int (_cdecl *ULPRET)(int);
    这样就OK了!