怎么才能在VC中动态的加载链接库。
最好有具体的代码?
我通过GetProcAddress得到的函数指针总是空的是怎么回事?

解决方案 »

  1.   


    LoadLibrary
    GetProcAddressFreeLibrary
      

  2.   

    给你更详细的代码吧,记得给分://显式链接时不需要使用相应的Lib文件或头文件
    //(int a, int b) 表示定义的新函数参数,如空则()
    typedef int(SQRTPROC)(int a, int b);  //定义类型 SQRTPROC 可以随意
    HINSTANCE hInstance; 
    SQRTPROC* pFunction; //函数hInstance=::LoadLibrary("test.dll"); 

    if (hInstance)
    {
       pFunction=(SQRTPROC*)::GetProcAddress(hInstance,"Min");

       if (pFunction)
    {
    int d=(*pFunction)(81,520);
    CString sss;
    sss.Format("Min Result is : %d",d);
    MessageBox(sss);
    }
    }
      

  3.   

    楼上的步骤基本正确
    小改动如下:
    //(int a, int b) 表示定义的新函数参数,如空则()
    //typedef int(SQRTPROC)(int a, int b);  //定义类型 SQRTPROC 可以随意
    注意函数调用是哪种类型_stdcall还是_cdecl
    typedef int(_stdcall/_cdecl*SQRTPROC)(int a, int b);  //定义类型 SQRTPROC 可以随意

    HINSTANCE hInstance; 
    SQRTPROC* pFunction; //函数
    //调试检查这里hInstance是不是空
    hInstance=::LoadLibrary("test.dll"); 
    if (hInstance)
    {
       //检查下面的名字是否正确(Min)
       pFunction=(SQRTPROC*)::GetProcAddress(hInstance,"Min");

       if (pFunction)
    {
    int d=(*pFunction)(81,520);
    CString sss;
    sss.Format("Min Result is : %d",d);
    MessageBox(sss);
    }
    }
    如果以上都没有问题就是动态连接库self有问题你用vc自带的工具depends看看函数名是不是
    c调用规范的
      

  4.   

    HINSTANCE hin;
    hin = ::LoadLibrary("mydll.dll");
    typedef void(*myfunc)(void);
    myfunc mf;
    mf = (myfunc)::GetProcAddress(hin, "myfunc");
    if(mf != (myfunc)NULL)
    {
        *myfunc();
    }
    ::FreeLibrary(hin);
      

  5.   

    我也碰到同样的问题,我专门做了一个TestDLL.dll测试,里面只有一个函数int add(int a,int b),不用def形式,用_declspec(dllexport)形式.
       用了楼上几位方法测试同样得到函数指针为0