我有 DLL 的以下 .h 代码,并使用 getProcAddress 在另一个代码中使用 DLL。
// MathFuncsDll.h
#ifdef MATHFUNCSDLL_EXPORTS
#define MATHFUNCSDLL_API __declspec(dllexport)
#else
#define MATHFUNCSDLL_API __declspec(dllimport)
#endif
namespace MathFuncs
{
// This class is exported from the MathFuncsDll.dll
class MyMathFuncs
{
public:
int x = 10;
MyMathFuncs();
// Returns a + b + x
MATHFUNCSDLL_API double Add(double a, double b);
};
}
对应的 .cpp 代码是
// MathFuncsDll.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
#include "MathFuncsDll.h"
#include <stdexcept>
using namespace std;
namespace MathFuncs
{
MyMathFuncs ::MyMathFuncs()
{
x = 10;
}
double MyMathFuncs::Add(double a, double b)
{
return a + b + x;
}
}
导出函数 Add 并将 a 和 b 以及 x = 10 的初始值相加。
我创建了一个相同的 DLL 文件并使用 LoadLibrary 和 GetProcAddress 调用函数。
当我不使用构造函数并直接添加10即a + b + 10时,代码工作正常。但是当我执行a + b + x时它会失败,并且基本上不会调用构造函数。
如何使用 GetProcAddress 实例化此类对象,以便在加载 DLL 并调用函数时获得实例化对象方法。