C++ 编译器使用名称修饰来唯一区分程序中的标识符。这种修改会导致名称与您在程序中使用的普通标识符有很大不同。因此,使用GetProcAddress
C++ 编写的驻留在 DLL 中的代码通常是不切实际的。相反,我建议使用__declspec(dllexport)
and__declspec(dllimport)
提供对驻留在 DLL 中的代码的轻松访问。
在您的 DLL 项目中,您需要添加一个预处理器定义,其名称如“EXPORT_CLASSES”或 DLL 唯一的名称。这将被您的 DLL 和程序用来确定特定声明是应该由 DLL 导出还是由程序导入。
dllstuff.h
#ifdef EXPORT_CLASSES
#define IMPORT_EXPORT __declspec(dllexport)
#else
#define IMPORT_EXPORT __declspec(dllimport)
#endif
然后,您将更改类声明math
以使用它。当 DLL 被编译时,IMPORT_EXPORT 将等于__declspec(dllexport)
并指示编译器和链接器该类的定义应该公开(即通过 DLL 的导出表)。
数学类.h
#include "dllstuff.h"
class IMPORT_EXPORT math
{
public:
int sum(int, int);
};
现在,您在主应用程序中所要做的就是在mathclass.h
您想要使用数学课程的任何时间包含在内。您现在可以实例化一个实例math
并访问它的成员函数。
#include "mathclass.h"
int main()
{
math m;
int result = m.sum(1, 2);
}
这当然只是对该过程的基本描述。网上有很多文章(包括 SO),提供了更详细的信息。