lv612219
enoone1
采纳率0%
2016-01-12 10:30

VC 6.0环境如何动态调用我这个dl,往高手指导l

A.dll头文件导出函数声明如下:
开发环境VC++ 6.0

typedef void *TESTHANDLE;
extern "C" __declspec(dllexport) int __stdcall TEST_Init(TESTHANDLE *hHandle);
extern "C" __declspec(dllexport) int __stdcall TEST_Exit(TESTHANDLE hHandle);
……

现在test工程需要动态调用该 A.dll
限定**只能使用LoadLibrary("KCBPCli.dll")动态调用**方式,请问怎么动态调用上述两个函数

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

9条回答

  • lm_whales lm_whales 5年前

    大概这么用,你的导出函数,不知这两个吧,用法类似
    传入一个 TESTHANDLE 或者它的地址
    TESTHANDLE hTest=NULL;
    //1)装入DLL
    //2)取出函数
    .//3)调用函数

    TEST_Init(&hTest);
    。。。。。。。。。。
    TEST_Exit(hTest);
    //4)释放DLL,如果多次Load ,释放后设置函数指针为NULL,DLL的HANDLE为NULL
    L

    点赞 1 评论 复制链接分享
  • mordecay mordecay 5年前

    //------------------------------------------------
    typedef void * TESTHANDLE;
    //------------------------------------------------
    extern "C"
    {
    int (__stdcall * TEST_Init)(TESTHANDLE * hHandle);
    int (__stdcall * TEST_Exit)(TESTHANDLE hHandle);
    }
    //------------------------------------------------
    int load_my_dll(const wchar_t *filename)
    {

    HINSTANCE hlib;
    
    hlib = LoadLibraryW(filename);
    
    if(hlib != NULL)
      {
          void *hfun;
    
          hfun = GetProcAddress(hlib, "TEST_Init");
      memcpy(&TEST_Init, &hfun, sizeof(hfun));
    
          hfun = GetProcAddress(hlib, "TEST_Exit");
      memcpy(&TEST_Exit, &hfun, sizeof(hfun));
    
        return S_OK;
    }
    
    return E_FAILED;
    

    }

    点赞 1 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 5年前

    KCBPCLIHANDLE hHandle = 0;
    加上这一行

    点赞 1 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 5年前

    int (*func)(TESTHANDLE *);

    点赞 1 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 5年前

    LoadLibrary得到dll句柄,接下来GetProcAddress得到指针,在你程序中定义函数指针,然后直接调用
    具体google下就有

    点赞 1 评论 复制链接分享
  • zuishikonghuan zuishikonghuan 5年前

    再用GetProcAddress得到函数的指针,再定义函数指针类型,再用这个类型定义变量,修改变量为真实函数指针,然后就可以直接调用了

    点赞 评论 复制链接分享
  • lv612219 enoone1 5年前

    KCBPCLIHANDLE hHandle;
    后赋给test_init报错:
    warning C4700: local variable 'hHandle' used without having been initialized

    点赞 评论 复制链接分享
  • oyljerry oyljerry 5年前

    TESTHANDLE 应该是一个句柄,你需要知道你调用TEST_Init的时候,你需要传递什么进去,可能直接定义个TESTHANDLE 变量就可以了,函数内部会给这个变量赋值

    点赞 评论 复制链接分享
  • lv612219 enoone1 5年前

    我是查过资料的 关键在于定义对应的函数指针时,不知道针对上述我给的那两个函数对应的参数类型怎么去定义,还望直接指出来。

    点赞 评论 复制链接分享

相关推荐