Vấn đề với (nhiều, nhiều) đề xuất thu thập thông tin đăng ký là rằng:
- có nhiều hơn một địa điểm đăng ký, bạn sẽ cần phải nhìn vào
- một lớp có thể được đăng ký và không tồn tại trong registry
Registration-free COM cho phép một lớp có sẵn mà không có nó là r egistered. Khái niệm bạn không muốn biết nếu một lớp học là "đã đăng ký", bạn chỉ muốn biết nó đã được đăng ký đủ để được tạo.
Thật không may là (và tốt nhất) Cách duy nhất để làm điều đó là để tạo ra nó:
//Code released into public domain. No attribution required.
function IsClassRegistered(const ClassID: TGUID): Boolean;
var
unk: IUnknown;
hr: HRESULT;
begin
hr := CoCreateInstance(ClassID, nil, CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IUnknown, {out}unk);
unk := nil;
Result := (hr <> REGDB_E_CLASSNOTREG);
end;
Nguồn
2015-10-04 03:12:27
Được cảnh báo rằng điều này không có nghĩa là các ocx thực tế là trên đĩa và trong vị trí bên phải. Và thậm chí sau đó nó không có nghĩa là các ocx có thể được nạp mà không có vấn đề. Và vì có đăng ký miễn phí com (http://msdn.microsoft.com/en-us/library/ms973913.aspx) nó cũng không cho biết liệu ocx có khả năng sử dụng được không. –