[C++] Tạo DLL bằng VC++

NhanSu

SMod
Thành viên BQT
Chào các bạn, trong chủ đề này, mình sẽ giới thiệu cách tạo DLL bằng C++, mình sẽ sử dụng Visual Studio (VS) 2019 để minh họa cách làm. Dùng DLL có một số ưu điểm so với VBA như tốc độ cao (mình chủ yếu quan tâm đến vấn đề này), bảo mật hơn, tuy vậy cũng khó viết, khó debug với người chỉ quen vba như mình chẳng hạn. Bài 1 mình tham khảo ở và có lồng ghép thêm cách truyền tham số kiểu byval và byref.
Mình sẽ minh họa DLL chỉ có hàm SumX(Byval a As Integer, ByRef b As Integer) hàm này tăng a thêm 1, tăng b thêm 2 và trả về kết quả a+b (a và b đã thay đổi).
Trước tiên, mở VS lên, chọn Create new project:
Bạn cần đăng nhập để thấy đính kèm

Trong màn hình Create new project, các bạn nhập DLL vào khung tìm kiếm rồi chọn Dynamic-Link Library (DLL) sau đó bấm Next
Bạn cần đăng nhập để thấy đính kèm

Tại màn hình tiếp, nhập tên Project (mình đặt tên là TestDLL) rồi bấm Create, ta được:
Bạn cần đăng nhập để thấy đính kèm


Trong cửa sổ Solution explorer bên phải màn hình, bấm chuột phải, chọn Add - New item..., chọn Header.h, đặt tên cho file (ví dụ TestDLL.h) rồi bấm nút Add. Nhập nội dung vào file TestDLL.h như sau:
Mã:
#pragma once
#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif
extern "C" TESTDLL_API int SumX(int a, int* b);
Các bạn bấm chuột trái vào dòng cuối file header (dòng extern "C"...), bấm Alt-Enter rồi chọn Create definition of SumX in TestDLL.cpp (trong hình mình đã có SumX rồi nên mình chọn hàm SumX2)
Bạn cần đăng nhập để thấy đính kèm

Nhập đoạn mã sau vào hàm SumX:
Mã:
#include "pch.h"
#include "TestDLL.h"

TESTDLL_API int SumX(int a, int* b)
{
    a++;
    *b = *b + 2;
    return a + *b;
}
Bạn cần đăng nhập để thấy đính kèm


Bước cuối: lựa chọn cấu hình build là release, x64 (do mình dùng Excel 64 bit, nếu các bạn dùng 32 bit thì cần build DLL tương ứng) rồi vào menu Build, chọn Build Solution, ta sẽ có file DLL
Bạn cần đăng nhập để thấy đính kèm

- Tiếp theo, ta sẽ test DLL vừa tạo, copy TestDLL.dll vào D:\abc\, tạo file TestDLL.xlsm với code VBA như sau (mình dùng 64 bit, các bạn dùng 32 bit cần sửa lệnh Declare):
Mã:
Declare PtrSafe Function SumX Lib "D:\abc\TestDLL.dll" (ByVal a As Integer, b As Integer) As Integer
Sub Test()
    Dim a As Integer, b As Integer
    a = 10
    b = 5
    Debug.Print SumX(a, b)
    Debug.Print a
    Debug.Print b
End Sub
Kết quả, đúng như dự đoán, sau khi gọi hàm, biến a không thay đổi còn b đã tăng thêm 2:
Bạn cần đăng nhập để thấy đính kèm
 

LATEX1123

Yêu THVBA
Binance mining tutorial

Binance Smart Chain mining

Binance Mining Paid Me More Than My Salary ($4,700/Month)

What is Binance mining

Binance mining registration

Binance mining payout schedule

The $30K Milestone: My Two-Year Journey with Binance Mining Rewards

Binance mining statistics

How I Hit $2,200 Monthly Passive Income with Binance Cloud Mining

Binance Pool vs Antpool

My Binance Mining Dashboard Shows $12,500 Earned This Year

Binance Pool

Proof of Work mining

Binance Pool hashrate

I Quit My Job After Hitting $74,300 Monthly Passive Income from Binance Mining

Binance mining alternative

How I Made $8,900 in 6 Months with Binance Cloud Mining

Binance mining telegram

The $12K Blueprint: Building Wealth with Binance Mining in 2026

My Binance Mining Payout Hit $95,000 This Month – Here’s the Proof

Binance mining earnings per day

Binance Pool Paid Me $3,100 This Month – And I Only Check It Once a Week

Binance mining pool PPLNS

Mining pool setup

Binance mining dashboard
[/URL]
 
Top