Xây dựng RPC Server cho Excel / Access bằng Delphi – Tận dụng lại DLL và bảo mật mã nguồn (1 người xem)

Người dùng đang xem chủ đề này

Tôi tuân thủ nội quy khi đăng bài

phuongnam366377

Thành viên thường trực
Tham gia
25/10/19
Bài viết
233
Được thích
227

Xây dựng RPC Server cho Excel / Access bằng Delphi – Tận dụng lại DLL và bảo mật mã nguồn​

Trong quá trình phát triển các hệ thống tự động hóa cho Excel / Access, chúng ta thường gặp một vấn đề quen thuộc:
  • Logic xử lý nằm ở nhiều máy
  • Mã nguồn VBA dễ bị lộ
  • Khó cập nhật khi thay đổi thuật toán
Một giải pháp khá thú vị là đưa toàn bộ logic lên Server và để Excel / Access gọi từ xa qua RPC (Remote Procedure Call).
Điều này thực chất không phải là công nghệ mới – nó đã tồn tại hơn 30 năm, nhưng ngày nay vẫn được dùng trong nhiều hệ thống hiện đại.

1. Một chút lịch sử: từ DCOM đến gRPC​

Trước đây hệ sinh thái Windows của Microsoft đã sử dụng DCOMCOM+ để các chương trình gọi hàm từ xa.
Ví dụ:
  • Microsoft Excel
  • Microsoft Access
có thể gọi các COM component chạy trên server.
Cách này từng rất phổ biến trong các hệ thống:
  • ERP
  • hệ thống ngân hàng
  • hệ thống doanh nghiệp Windows
Sau này khi internet phát triển, các công nghệ RPC hiện đại xuất hiện như:
  • gRPC
  • REST API
  • Microservices
Dù công nghệ thay đổi, ý tưởng cốt lõi vẫn giống nhau:
Máy khách gọi một hàm trên máy chủ như gọi hàm local.

2. RPC Server cho Excel / Access hoạt động như thế nào?​

Kiến trúc đơn giản:
Mã:
Excel / Access (VBA)
        │
        │ RPCExecute()
        ▼
RPC Server (Delphi)
        │
        │ Load DLL Plugin
        ▼
Business Logic DLL
Luồng xử lý:
1️⃣ Excel / Access gọi
Mã:
RPCExecute("127.0.0.1",9000,"MathPlugin.dll","Add","[5,7]")
2️⃣ RPC Server nhận request
3️⃣ Server load DLL plugin
4️⃣ Gọi hàm bên trong DLL
5️⃣ Trả kết quả lại cho Excel

3. Ví dụ thực tế​

VBA trong Excel / Access​

Mã:
Sub Test()

    Debug.Print RPCExecute("127.0.0.1", 9000, "MathPlugin.dll", "Add", "[5,7]")

End Sub
Kết quả:
Mã:
12

DLL phía Server (Delphi)​

Mã:
function Add(A, B: Integer): Integer;
begin
  Result := A + B;
end;
Server sẽ gọi hàm này và trả kết quả về cho VBA.

4. Điểm mạnh cực kỳ thú vị của mô hình này​

1️⃣ Tái sử dụng DLL đã viết​

Nếu trước đây bạn đã viết:
Mã:
Math.dll
Finance.dll
AI.dll
Bạn không cần viết lại.
Chỉ cần:
Mã:
RPCLoadDLL('MathPlugin.dll');
Server có thể gọi trực tiếp.

2️⃣ Bảo mật mã nguồn​

VBA thường bị lộ logic vì người dùng có thể:
Mã:
Alt + F11
xem toàn bộ code.
Với RPC:
Mã:
Excel / Access
    ↓
chỉ gọi hàm
Logic nằm ở server.
Người dùng không thể xem thuật toán.

3️⃣ Cập nhật cực nhanh​

Nếu thay đổi thuật toán:
Mã:
Replace DLL
Không cần:
  • cập nhật Excel
  • cập nhật Access
  • gửi file mới
Toàn bộ client tự dùng logic mới ngay lập tức.

4️⃣ Hỗ trợ nhiều ngôn ngữ​

Client có thể viết bằng:
  • VBA
  • Python
  • C#
  • JavaScript
  • Go
Miễn là gửi request đúng format.

5. So sánh với các công nghệ RPC khác​

Công nghệNền tảngĐộ phức tạpPhù hợp Excel/Access
COM / DCOMWindowsTrung bình✔ tốt
REST APICross-platformDễ
gRPCCross-platformKhó hơn
RPC + DLL PluginWindowsRất đơn giản✔✔✔
Điểm đặc biệt của mô hình RPC + DLL Plugin:
  • cực nhẹ
  • không cần framework lớn
  • tận dụng code Delphi/C++ cũ

6. Khi nào nên dùng mô hình này?​

Rất phù hợp khi:
✔ Hệ thống nội bộ
✔ Excel / Access làm frontend
✔ Logic phức tạp cần bảo mật
✔ Muốn tái sử dụng DLL cũ
Ví dụ:
  • hệ thống tính giá
  • hệ thống phân tích dữ liệu
  • hệ thống tài chính
  • hệ thống AI nội bộ

7. Kết luận​

Công nghệ như DCOM có thể không còn phổ biến như trước, nhưng ý tưởng Remote Procedure Call vẫn là nền tảng của rất nhiều hệ thống hiện đại.
Ngày nay chúng ta thấy:
  • gRPC
  • microservices
  • API server
đều dựa trên cùng một nguyên lý:
Client chỉ gọi hàm – Server xử lý logic.
Đối với các hệ thống Excel / Access, việc xây dựng một RPC Server với DLL plugin là một giải pháp:
  • nhẹ
  • nhanh
  • bảo mật
  • tái sử dụng code
và cực kỳ phù hợp cho các hệ thống doanh nghiệp nội bộ.

 

Bài viết mới nhất

Back
Top Bottom