C ++ - 如何使其他类可以使用显式导入的DLL函数

时间:2014-10-18 07:58:16

标签: c++ dll

我有一个名为mydll.dll的dll,在dll中有一个名为testFunc()的函数。我希望testFunc()可以在GetProcAddress()编辑范围之外的其他范围内使用。{/ p>

例如:

的main.cpp

#include <Windows.h>
typedef void(*f_testFunc)();
int main(){
    // load dll into hDll
    f_testFunc testFunc = (f_testFunc)GetProcAddress(hDll, "testFunc");

    for (int i = 0; i < NUM; i++){
        A a = A();
    }
}

A.cpp

class A{
    public:
    A(){
        testFunc();
    }
}

我只想在我的代码中的任何地方使用testFunc(),而无需从dll重新获取它。

2 个答案:

答案 0 :(得分:1)

创建一个头文件(myheader.h)。在那里声明函数变量,作为extern。在所有源文件中包含此标头。明确定义变量并将其设置为main。

<强> myheader.h

typedef void(*f_testFunc)();
extern f_testFunc testFunc;

<强>的main.cpp

#include "myheader.h"
f_testfunc testFunc;
int main () {
    testFunc = (f_testFunc)GetProcAddress(hDll, "testFunc");
    for (int i ...

<强> A.cpp

#include "myheader.h"
class A {
    public:
    A () {
        testFunc();
    }
}

答案 1 :(得分:1)

我试图为mentioned DLL包装类

制作一个示例
 typedef void(*f_testFunc)();

 class DllWrapper {

      DllWrapper(HDLL hDll) {
          testFunc_ = (f_testFunc)GetProcAddress(hDll, "testFunc");
      }
      void testFunc() {
          (*testFunc_)();
      }

 private:
      f_testFunc testFunc_;
 };

 class A {
 public:
     A(DllWrapper& dll) dll_(dll) {
          dll_.testFunc();
     }

 private:
     DllWrapper& dll_;
 };

int main(){
    // load dll into hDll
    DllWrapper dll(hDll);

    for (int i = 0; i < NUM; i++){
        A a = A(dll);
    }
}