静态库
生成
// 头文件
#ifndef _MYLIB_H_
#define _MYLIB_H_
void fun(int a);
extern int k;
class testclass
{
public:
testclass();
void print();
};
#endif
// 定义
#include "stdafx.h"
#include "testlib.h"
#include <iostream>
using namespace std;
void fun(int a)
{
cout << "a: "+a << endl;
}
int k = 222;
void testclass::print()
{
cout << "k: " + k << endl;
}
testclass::testclass()
{
cout << "init" << endl;
}
调用
#include "stdafx.h"
#include "testlib.h"
#include <iostream>
using namespace std;
// 也可使用项目附加库目录
#pragma comment(lib,"testlib.lib")
int _tmain(int argc, _TCHAR* argv[])
{
int a = 23;
cout << "a: "<< a << endl;
return 0;
}
动态库
生成
// 头文件
#ifdef DLL_EXPORTS
#define DLL_API_XYG __declspec(dllexport)
#else
#define DLL_API_XYG __declspec(dllexport)
#endif
class DLL_API_XYG Cdll
{
public:
Cdll(void);
};
extern DLL_API_XYG int ndll;
extern "C" DLL_API_XYG int add(int x, int y);
// 定义
#include "stdafx.h"
#include "testdll.h"
DLL_API_XYG int ndll = 6;
DLL_API_XYG int add(int x, int y)
{
return x + y;
}
Cdll::Cdll(void)
{
}
调用
#include "stdafx.h"
#include "testdll.h"
// 也可使用项目附加库目录
#pragma comment(lib, "testdll.lib")
int _tmain(int argc, _TCHAR* argv[])
{
printf("%d \n", add(22, 33));
getchar();
return 0;
}
#include "stdafx.h"
// #include "testdll.h"
#include <Windows.h>
typedef int(*DLLDEMOFUNC)(int , int);
int _tmain(int argc, _TCHAR* argv[])
{
DLLDEMOFUNC dllFunc = nullptr;
HINSTANCE hDll;
// 动态加载dll
hDll = LoadLibrary(L"testdll.dll");
// 根据函数名获取dll地址
dllFunc = (DLLDEMOFUNC)GetProcAddress(hDll, "add");
printf("%d \n", dllFunc(22, 23));
getchar();
// 卸载dll
FreeLibrary(hDll);
return 0;
}