Sử dụng COM DLL **không cần đăng ký** với Delphi 12 / C++ Builder (1 người xem)

Liên hệ QC

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 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):

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:

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

Back
Top Bottom