参考 C++动态库封装及调用
创建工程
testDll.h
// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 TESTDLL_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
// TESTDLL_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
//#ifdef TESTDLL_EXPORTS
//#define TESTDLL_API __declspec(dllexport)
//#else
//#define TESTDLL_API __declspec(dllimport)
//#endif
#define TESTDLL_API __declspec(dllexport)
// 此类是从 dll 导出的
class TESTDLL_API CtestDll {
public:
CtestDll(void);
// TODO: 在此处添加方法。
};
extern "C"
{
TESTDLL_API int ntestDll;
TESTDLL_API int fntestDll(void);
TESTDLL_API double Add(double a, double b);
TESTDLL_API int foo(int value);
}
testDll.cpp
// testDll.cpp : 定义 DLL 的导出函数。
//
#include "testDll.h"
// 这是导出函数的一个示例。
TESTDLL_API int fntestDll(void)
{
return 0;
}
TESTDLL_API double Add(double a, double b) {
return a + b;
}
// 这是已导出类的构造函数。
CtestDll::CtestDll()
{
return;
}
TESTDLL_API int foo(int value)
{
return value;
}
删了一些文件
项目右键属性 - C/C++ - 预编译头 - 预编译头-不使用预编译头
报错 不是有效的Win32用用程序
1、不是点
2、点生成-生成解决方案