phuongnam366377
Thành viên thường trực




- Tham gia
- 25/10/19
- Bài viết
- 274
- Được thích
- 242
Ý tưởng từ chủ đề sau
cũng không ngờ nhờ có AI viết ra hệ thống này từ ý tưởng của Thetrik
github.com
Keo ChatGPT viết bài sau ...
Thư viện này được phát triển bằng C++ Builder và hoạt động như một Dynamic Win64 ABI Invocation Engine.
Nói đơn giản, đây là lớp trung gian cho phép gọi các hàm native của DLL tại thời điểm chạy mà không cần biết trước chữ ký hàm khi biên dịch.
Trong quá trình phát triển phần mềm, đặc biệt với các ứng dụng VBA, VB6, Delphi, C++ hay Go, một trong những khó khăn thường gặp là việc tích hợp các thư viện DLL được biên dịch bởi các ngôn ngữ và kiến trúc khác nhau.
Ví dụ:
Từ nhu cầu thực tế đó, tôi xây dựng một nền tảng trung gian có tên là Bridge RPC.
Kiến trúc tổng quát:
Client Application
(VBA / VB6 / Delphi / Go / C++)
↓
BridgeClient.dll
↓
TCP RPC
↓
BridgeServer.exe
↓
BridgeInvoker64.dll
↓
Business DLL
Nhờ kiến trúc này:
Hiện tại tôi đã thử nghiệm thành công với:
Phía client chỉ cần gửi:
Nó hoạt động như một Dynamic ABI Invocation Engine.
Thay vì phải biết trước chữ ký hàm:
int Add(int A, int B);<br>
BridgeInvoker64.dll nhận mô tả tham số tại thời điểm chạy:
Function Pointer<br>+<br>Argument Metadata<br>+<br>Return Type<br>
sau đó tự động:
Dim Json As String<br><br>Json = BridgeQueryJSON( _<br> "SELECT * FROM [NhapXuatTon]")<br>
Phía VBA hoàn toàn không cần biết:
Không sử dụng COM hoặc REST nên chi phí xử lý thấp.
Thay vì phụ thuộc vào ABI của compiler hoặc giới hạn 32-bit / 64-bit, hệ thống sử dụng một lớp Runtime Invocation và RPC trung gian để tách biệt hoàn toàn:
Dự án hiện vẫn đang trong quá trình hoàn thiện và mở rộng, nhưng các thử nghiệm thực tế cho thấy mô hình này hoạt động ổn định trên nhiều ngôn ngữ và môi trường khác nhau.
Rảnh mở chủ đề này xem có ai ý kiến gì không và cũng thử xem trên này có nhiều thành viên lý thuyết kinh điển lắm tham gia bà tám chơi thôi
Keo ChatGPT viết bài sau ... Copy nội dung y trang ChatGPT viết dưới
Mình đang tìm hiểu về WOW64 và khả năng tương tác giữa tiến trình 32-bit với môi trường 64-bit trên Windows.
Khi tìm kiếm thì đa số tài liệu đều nói:
Keo ChatGPT viết bài sau ... Copy nội dung y trang ChatGPT viết dưới
Thảo luận kỹ thuật: có thể gọi hàm DLL 64-bit từ VBA/VB6 32-bit thông qua bridge WOW64 không
Chào các anh/chị,Mình đang tìm hiểu về WOW64 và khả năng tương tác giữa tiến trình 32-bit với môi trường 64-bit trên Windows.
Khi tìm kiếm thì đa số tài liệu đều nói:
- process 32-bit không thể load trực tiếp DLL 64-bit
- VBA/VB6 32-bit không thể gọi native x64...
- phuongnam366377
- Trả lời: 2
- Diễn đàn: Excel và các ngôn ngữ lập trình khác
cũng không ngờ nhờ có AI viết ra hệ thống này từ ý tưởng của Thetrik
GitHub - thetrik/Vb64BitDllUsage: Using 64-bit dll in VB6 (in WOW64)
Using 64-bit dll in VB6 (in WOW64). Contribute to thetrik/Vb64BitDllUsage development by creating an account on GitHub.
Keo ChatGPT viết bài sau ...
Bridge RPC – Nền tảng tích hợp DLL đa ngôn ngữ, không phụ thuộc 32-bit hay 64-bit
Giới thiệu
Trong toàn bộ kiến trúc Bridge RPC, thành phần quan trọng nhất là BridgeInvoker64.dll.Thư viện này được phát triển bằng C++ Builder và hoạt động như một Dynamic Win64 ABI Invocation Engine.
Nói đơn giản, đây là lớp trung gian cho phép gọi các hàm native của DLL tại thời điểm chạy mà không cần biết trước chữ ký hàm khi biên dịch.
Trong quá trình phát triển phần mềm, đặc biệt với các ứng dụng VBA, VB6, Delphi, C++ hay Go, một trong những khó khăn thường gặp là việc tích hợp các thư viện DLL được biên dịch bởi các ngôn ngữ và kiến trúc khác nhau.
Ví dụ:
- VBA 32-bit không thể gọi trực tiếp DLL 64-bit.
- VB6 chỉ chạy 32-bit.
- Go chỉ hỗ trợ biên dịch DLL 64-bit trên Windows hiện đại.
- Mỗi ngôn ngữ lại có ABI và cơ chế gọi hàm khác nhau.
- COM/DCOM
- .NET Interop
- REST API
- gRPC
Từ nhu cầu thực tế đó, tôi xây dựng một nền tảng trung gian có tên là Bridge RPC.
Ý tưởng
Thay vì để ứng dụng gọi trực tiếp DLL đích, mọi lời gọi sẽ đi qua một lớp RPC trung gian.Kiến trúc tổng quát:
Client Application
(VBA / VB6 / Delphi / Go / C++)
↓
BridgeClient.dll
↓
TCP RPC
↓
BridgeServer.exe
↓
BridgeInvoker64.dll
↓
Business DLL
Nhờ kiến trúc này:
- Client không cần biết DLL được viết bằng ngôn ngữ nào.
- Client không cần biết DLL đang chạy 32-bit hay 64-bit.
- DLL nghiệp vụ có thể được thay đổi hoặc mở rộng mà không ảnh hưởng phía ứng dụng.
Điểm đặc biệt
Bridge RPC không ràng buộc vào một ngôn ngữ cụ thể.Hiện tại tôi đã thử nghiệm thành công với:
- VBA 32-bit
- VBA 64-bit
- VB6
- Delphi
- C++ Builder
- Go
Phía client chỉ cần gửi:
- Tên hàm
- Danh sách tham số
- Kiểu dữ liệu
Dynamic ABI Invocation
Thành phần quan trọng nhất của hệ thống là BridgeInvoker64.dll.Nó hoạt động như một Dynamic ABI Invocation Engine.
Thay vì phải biết trước chữ ký hàm:
int Add(int A, int B);<br>
BridgeInvoker64.dll nhận mô tả tham số tại thời điểm chạy:
Function Pointer<br>+<br>Argument Metadata<br>+<br>Return Type<br>
sau đó tự động:
- Phân bổ thanh ghi
- Sắp xếp stack
- Thực hiện lời gọi theo Microsoft x64 ABI
- Thu nhận giá trị trả về
Hỗ trợ kiểu dữ liệu
Hệ thống hiện hỗ trợ:- Int32
- UInt32
- Int64
- UInt64
- Double
- Pointer
Một ví dụ đơn giản
Từ VBA:Dim Json As String<br><br>Json = BridgeQueryJSON( _<br> "SELECT * FROM [NhapXuatTon]")<br>
Phía VBA hoàn toàn không cần biết:
- DLL được viết bằng Delphi hay Go
- Hàm thực thi nằm ở đâu
- Đang chạy trên tiến trình nào
Lợi ích thực tế
1. Tương thích lâu dài
Các ứng dụng cũ như:- Excel VBA
- Access VBA
- VB6
- Go
- Delphi 64-bit
- C++
- Các DLL native khác
2. Không phụ thuộc kiến trúc
Client 32-bit và 64-bit có thể sử dụng cùng một hệ thống.3. Mở rộng dễ dàng
Khi cần bổ sung chức năng mới:- Chỉ cần cập nhật DLL phía server.
- Không cần biên dịch lại VBA hoặc VB6.
4. Hiệu năng cao
Giao tiếp sử dụng TCP nội bộ và lời gọi native function.Không sử dụng COM hoặc REST nên chi phí xử lý thấp.
Các hướng ứng dụng
Bridge RPC có thể được sử dụng cho:- Hệ thống Plugin
- Excel Automation
- Access Database Tools
- ERP nội bộ
- Kết nối VBA với Go
- Kết nối VB6 với DLL hiện đại
- Dynamic DLL Loader
- Native RPC Framework
Kết luận
Bridge RPC được xây dựng với mục tiêu tạo ra một lớp tương thích chung giữa các ngôn ngữ lập trình và các kiến trúc khác nhau.Thay vì phụ thuộc vào ABI của compiler hoặc giới hạn 32-bit / 64-bit, hệ thống sử dụng một lớp Runtime Invocation và RPC trung gian để tách biệt hoàn toàn:
- Ngôn ngữ lập trình
- Compiler
- ABI
- Kiến trúc hệ thống
Dự án hiện vẫn đang trong quá trình hoàn thiện và mở rộng, nhưng các thử nghiệm thực tế cho thấy mô hình này hoạt động ổn định trên nhiều ngôn ngữ và môi trường khác nhau.
Lần chỉnh sửa cuối:
