2009-09-08 39 views

Trả lời

17

Bạn có thể nghĩ về CoCreateInstance() làm giao diện cho một lớp nhà máy ẩn danh.

Trong OOP thường hợp lý để sử dụng mẫu nhà máy để chỉ gọi phương thức tạo và nhận con trỏ/tham chiếu giao diện mà không cần phải biết chính xác lớp nào đằng sau giao diện đó. Nhưng bạn vẫn cần biết lớp nào để sử dụng làm nhà máy. Bạn có thể ẩn nó bằng cách có một số chức năng toàn cầu nhưng bạn vẫn cần phải biết tên của nó và các quy ước gọi.

CoCreateInstance tiến xa hơn - nó cũng ẩn lớp nhà máy và cung cấp chức năng toàn cầu trên toàn hệ thống. Tất cả bạn cung cấp nó là một id lớp - mà chỉ là một GUID - và một id giao diện - đó cũng là một GUID. Bạn không biết nơi thực hiện và ngôn ngữ của nó là gì - COM giao dịch với tất cả những gì cho rằng có một máy chủ COM trên hệ thống của bạn có chứa việc triển khai cho id lớp được chỉ định cho thấy một giao diện cho id giao diện được chỉ định.

Bạn gọi toàn cầu CoCreateInstance(), nó tìm thấy máy chủ COM (hoặc không thành công), khởi tạo nó, yêu cầu nó tạo đối tượng (có thể thất bại), truy xuất con trỏ giao diện đến đối tượng đó (có thể không thành công)) và trả về con trỏ giao diện này cho bạn.

3

Đặt một cách đơn giản, nó được sử dụng để tạo một thể hiện của một lớp, lớp được chỉ định bởi GUID.

HRESULT CoCreateInstance(
    __in REFCLSID rclsid, // which class you want 
    __in LPUNKNOWN pUnkOuter, // used in aggregation 
    __in DWORD dwClsContext, // how/where you want the object created 
    __in REFIID riid, // which of the object's interfaces you want to use 
    __out LPVOID *ppv // where the pointer to the created object is placed 
); 

Để biết thêm thông tin, hãy đọc documentation.

Các vấn đề liên quan