C++笔记-DLL的编写与调用
生活随笔
收集整理的這篇文章主要介紹了
C++笔记-DLL的编写与调用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
?
?
基本概念
代碼與實例
?
基本概念
Visual Studio的編譯環境下,DLL分為3類:
非MFC的DLL,使用SDK API進行編程,能被所有語言調用。
MFC規則DLL,可以使用MFC進行編程,能被其他語言調用。
MFC擴展DLL,可以使用MFC進行編程,但只能被MFC編寫的程序調用。?
// dllmain.cpp : 定義 DLL 應用程序的入口點。 #include "stdafx.h"BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) {.................. }hMoulde:指向dll實例的句柄;
ul_reason_for_call:指明dll被調用的原因
LPVOID:保留,不使用。
內部為:
{switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;}return TRUE; }DLL_PROCESS_ATTACH:當進程第一次鏈接DLL并通過它的入口點時,會得到這個參數。
DLL_PROCESS_DETACH:進程在空間內取消DLL映射時,得到這個參數。
DLL_THREAD_ATTACH:每當新線程創建時,系統會對所有映射的DLL傳入此參數調用入口函數。
DLL_THREAD_DETACH:每當線程退出或返回時,系統會對所有映射的DLL傳此參數要求執行對應清理工作。
?
進程調用DLL的過程:
使用LoadLibrary加載需要的dll,
使用GetProcAddress獲取函數入口
然后就可以調用了!
?
?
代碼與實例
dll關鍵代碼如下:
.h文件:
#pragma once#include "stdafx.h"#define ExportFunc _declspec(dllexport) extern "C" ExportFunc int Add(int a, int b); extern "C" ExportFunc int Sub(int a, int b);.cpp文件
#include "stdafx.h" #include "ExportDLL.h"int Add(int a, int b){return a + b; }int Sub(int a, int b){return a - b; }調用采用mfc:
typedef int(*ADD)(int a, int b); typedef int(*SUB)(int a, int b);void CInjecterDemoDlg::OnBnClickedButton1() {HMODULE hModule = LoadLibraryW(_T("E:\\vs2012\\DllTest\\Debug\\DllTest.dll"));if(!hModule){return;}ADD Add;SUB Sub;Add = (ADD)GetProcAddress(hModule, "Add");Sub = (SUB)GetProcAddress(hModule, "Sub");if(!Add || !Sub){return;}int Result;Result = 0;Result = Add(10, 5);CString result;result.Format(_T("%d"), Result);MessageBox(result);Result = Sub(10, 5);result.Format(_T("%d"), Result);MessageBox(result);FreeLibrary(hModule); }項目下載地址:
https://github.com/fengfanchen/CAndCPP/tree/master/DllTest
?
總結
以上是生活随笔為你收集整理的C++笔记-DLL的编写与调用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java笔记-使用RabbitMQ的Ja
- 下一篇: QML笔记-自定义控件的2种点击方式(推