静态库

生成

//  头文件
#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;
}
12-31 02:52