1.建立动态链接库
建立工程动态链接工程calDll
编写文件dllmain.h
#pragma once
// Windows 头文件
#include <windows.h>
#include <iostream>
extern "C" _declspec(dllexport) int cal(int a, int b);
编写文件dllmain.cpp
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include <iostream>
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
printf("\nprocess attach of dll");
break;
case DLL_THREAD_ATTACH:
printf("\nthread attach of dll");
break;
case DLL_THREAD_DETACH:
printf("\nthread detach of dll");
break;
case DLL_PROCESS_DETACH:
printf("\nprocess detach of dll");
break;
}
return TRUE;
}
int _declspec(dllexport) cal(int a, int b)
{
return a + b;
}
编译生成动态链接文件calDll.dll和calDll.lib
2.显式引用动态链接文件
建立工程testDll,在工程文件夹下加入文件calDll.dll
编写文件testDll.cpp
// testDll.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <Windows.h>
typedef int (*Cal)(int a, int b);
HINSTANCE hDll;
Cal cal = NULL;
int main()
{
hDll = LoadLibrary("calDll.dll");
if (hDll == NULL)
{
printf("fail1");
system("pause");
return 0;
}
cal = (Cal)GetProcAddress(hDll, "cal");
if (cal == NULL)
{
printf("fail2");
system("pause");
return 0;
}
std::cout << std::endl;
printf("%d\n", cal(1,2));
std::cout << cal(1, 2) << "\n";
FreeLibrary(hDll);
system("pause");
std::cout << "Hello World!\n";
}