Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 2 của 2
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Hỏi về lập trình COM

    Xin chào,
    Mình đang viết 1 COM server CLSCTX_LOCAL_SERVER, nhưng gặp 1 lỗi, nhờ các cao thủ giúp với.

    1. COM server.
    - Mình IDL để khai báo interfaceID, classID.
    - Cấu trúc COM Server mình design như thế này:

    class CMyFactory : public IClassFactory
    {
    };

    class CMyObj : public IUnknown
    {
    -----class XSubClass : public IMyInterface
    -----{
    -----}m_subClass;
    -----friend class CMyObj;
    }

    - Khi start COM Server, thì mình gọi CoRegisterClassObject để đăng ký FactoryObject với hệ thống.

    2. COM Client.
    Mình gọi 2 hàm sau:
    - get object: CoGetClassObject(CLSID_CoMyObj, CLSCTX_LOCAL_SERVER, NULL, IID_IClassFactory, (void **) &pFac);
    - tạo instance: pFac->CreateInstance(NULL,interfaceID,(void**)&pObj);

    Tuy nhiên, gọi CreateInstance thì lại trả kết quả là "Interface not registered".

    Mình đã thử đăng ký vào Registry như thế này, nhưng vẫn bị lỗi trên.

    HKEY_CLASSES_ROOT\interface
    -----{My Interface Value}
    ---------ProxyStubClsid32 = My ClassID value.

    HKEY_CLASSES_ROOT\CLSID
    -----{My ClassID value}
    ---------LocalServer32 = Path of exe

    Mong các cao thủ trợ giúp. Xin cảm ơn!

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Không giống như đối tượng .NET tự thân nó đã có mô tả trong Manifest, đối tượng COM bất kể là loại trong hay ngoài tiến trình thì cũng cần phải đăng ký với hệ thống. Bạn khó có thể chỉnh sửa trực tiếp trong Registry mà để cho nó hoạt động được, vì chúng ta khó biết ( vì nó được ghi vào rất nhiều khóa) nó dàn trải tới đâu. Cách thức tốt nhất là dùng regsvr32 theo cú pháp dòng lệnh như sau :

    regsvr32 <đường dẫn của tập tin bạn đã tạo (*.dll or *.exe)>

    Trong khi thử nghiệm, nếu muốn gỡ đăng ký thì :

    regsvr32 /u <đường dẫn của tập tin bạn đã tạo (*.dll or *.exe)>

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •