phuongnam366377
Thành viên hoạt động



- Tham gia
- 25/10/19
- Bài viết
- 171
- Được thích
- 191
Rảnh Tôi thử viết C++ kết hợp với ChatGPT vừa dò vừa chơi vài tiếng xong cái hàm đơn giản úp cho ai cần thì sử dụng
Bước vào của ngõ lập Trình C++ Builder trên Delphi 12 rồi
thong thả sẽ có rất nhiều hàm C++ Builder theo thời gian thôi
Nội dung sau do ChatGPT biên soạn theo ý của Tôi
## 1. Vấn đề khi làm việc với COM
Thông thường, một thư viện COM (DLL hoặc OCX) phải được **đăng ký vào Windows Registry** bằng `regsvr32` trước khi dùng.
Điều này gây nhiều bất tiện:
* Cần quyền admin để đăng ký.
* Có thể xung đột khi nhiều phiên bản DLL cùng tồn tại.
* Khó triển khai trên nhiều máy người dùng.
---
## 2. Giải pháp: **DirectCOM DLL (Bridge DLL)**
Với Delphi 12 hoặc C++ Builder, có thể xây dựng một **DLL cầu nối** (ví dụ `DirectCOM32.dll` và `DirectCOM64.dll`).
DLL này cung cấp một hàm tiện lợi, cho phép gọi trực tiếp đến COM DLL bất kỳ thông qua CLSID, **không cần đăng ký vào hệ thống**.
Ưu điểm:
* Chạy được cả trên Excel VBA 32-bit và 64-bit.
* Không cần `regsvr32`.
* Dễ triển khai ứng dụng dạng portable.
* Tái sử dụng được nhiều COM DLL có sẵn trong Windows hoặc DLL tự viết.
---
## 3. Cách sử dụng trong VBA
Trong VBA (Excel, Access…), bạn chỉ cần:
1. **Khai báo API**
Khai báo hàm `CreateObjectFromDllSecure` từ `DirectCOM32.dll` hoặc `DirectCOM64.dll` tùy theo phiên bản Office.
2. **Viết wrapper chung**
Wrapper sẽ nhận vào đường dẫn DLL và CLSID, trả về Object để dùng trực tiếp.
3. **Gọi COM DLL không cần đăng ký**
Ví dụ với `scrrun.dll` (FileSystemObject):
Chỉ cần đúng đường dẫn DLL + CLSID, VBA sẽ khởi tạo COM object mà không qua Registry.
---
## 4. Ứng dụng thực tế
* Gọi COM DLL hệ thống như `scrrun.dll`, `msxml.dll`, … mà không đăng ký.
* Dùng DLL nội bộ trong doanh nghiệp, triển khai dễ dàng (copy là chạy).
* Giảm rủi ro xung đột phiên bản DLL.
* Hữu ích cho VBA, VB6, thậm chí .NET khi cần portable.
---
## 5. Kết luận
Với **DirectCOM DLL** viết bằng Delphi / C++ Builder, lập trình viên có thể:
* Dễ dàng khởi tạo COM object từ DLL bất kỳ.
* Không cần quan tâm đến đăng ký COM.
* Tận dụng lại thư viện COM cũ trong dự án mới.
Đây là công cụ hữu ích cho những ai làm việc với VBA, COM, hoặc triển khai ứng dụng văn phòng mà muốn **nhẹ nhàng, không ràng buộc Registry**.
==========================
Nhiều năm trước khi chưa có ChatGPT cái hàm trên Tôi đã viết thành công rồi ( Tìm GPE này là thấy )
Giờ viết lại nhờ ChatGPT trên C++ Builder chơi cho vui là chính và khám phá nhập Môn C++ Builder trên Delphi 12
==========================
PassWord WinRaR là: 123
Bước vào của ngõ lập Trình C++ Builder trên Delphi 12 rồi
thong thả sẽ có rất nhiều hàm C++ Builder theo thời gian thôi
Nội dung sau do ChatGPT biên soạn theo ý của Tôi
## 1. Vấn đề khi làm việc với COM
Thông thường, một thư viện COM (DLL hoặc OCX) phải được **đăng ký vào Windows Registry** bằng `regsvr32` trước khi dùng.
Điều này gây nhiều bất tiện:
* Cần quyền admin để đăng ký.
* Có thể xung đột khi nhiều phiên bản DLL cùng tồn tại.
* Khó triển khai trên nhiều máy người dùng.
---
## 2. Giải pháp: **DirectCOM DLL (Bridge DLL)**
Với Delphi 12 hoặc C++ Builder, có thể xây dựng một **DLL cầu nối** (ví dụ `DirectCOM32.dll` và `DirectCOM64.dll`).
DLL này cung cấp một hàm tiện lợi, cho phép gọi trực tiếp đến COM DLL bất kỳ thông qua CLSID, **không cần đăng ký vào hệ thống**.
Ưu điểm:
* Chạy được cả trên Excel VBA 32-bit và 64-bit.
* Không cần `regsvr32`.
* Dễ triển khai ứng dụng dạng portable.
* Tái sử dụng được nhiều COM DLL có sẵn trong Windows hoặc DLL tự viết.
---
## 3. Cách sử dụng trong VBA
Trong VBA (Excel, Access…), bạn chỉ cần:
1. **Khai báo API**
Khai báo hàm `CreateObjectFromDllSecure` từ `DirectCOM32.dll` hoặc `DirectCOM64.dll` tùy theo phiên bản Office.
2. **Viết wrapper chung**
Wrapper sẽ nhận vào đường dẫn DLL và CLSID, trả về Object để dùng trực tiếp.
3. **Gọi COM DLL không cần đăng ký**
Ví dụ với `scrrun.dll` (FileSystemObject):
Mã:
Sub TestFSO()
Dim fso As Object
Set fso = CreateObjectFromDll("C:\Windows\System32\scrrun.dll", _
"{0D43FE01-F093-11CF-8940-00A0C9054228}")
MsgBox "Type: " & TypeName(fso)
End Sub
Chỉ cần đúng đường dẫn DLL + CLSID, VBA sẽ khởi tạo COM object mà không qua Registry.
---
## 4. Ứng dụng thực tế
* Gọi COM DLL hệ thống như `scrrun.dll`, `msxml.dll`, … mà không đăng ký.
* Dùng DLL nội bộ trong doanh nghiệp, triển khai dễ dàng (copy là chạy).
* Giảm rủi ro xung đột phiên bản DLL.
* Hữu ích cho VBA, VB6, thậm chí .NET khi cần portable.
---
## 5. Kết luận
Với **DirectCOM DLL** viết bằng Delphi / C++ Builder, lập trình viên có thể:
* Dễ dàng khởi tạo COM object từ DLL bất kỳ.
* Không cần quan tâm đến đăng ký COM.
* Tận dụng lại thư viện COM cũ trong dự án mới.
Đây là công cụ hữu ích cho những ai làm việc với VBA, COM, hoặc triển khai ứng dụng văn phòng mà muốn **nhẹ nhàng, không ràng buộc Registry**.
==========================
Nhiều năm trước khi chưa có ChatGPT cái hàm trên Tôi đã viết thành công rồi ( Tìm GPE này là thấy )
Giờ viết lại nhờ ChatGPT trên C++ Builder chơi cho vui là chính và khám phá nhập Môn C++ Builder trên Delphi 12
==========================
PassWord WinRaR là: 123
File đính kèm
Lần chỉnh sửa cuối: