日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++笔记-DLL的编写与调用

發布時間:2025/3/15 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的编写与调用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。