Chủ đề: Hỏi về lập trình COM
-
22-09-2015, 06:59 PM #1Junior Member
- 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!View more random threads:
- SetWindowsHookEx ko thành công?
- Không thể bắt được phím trong hook.
- Hook TerminateProcess nhưng khi kill các tiến trình khác ngoài tiến trình mình định sẵn thì bị crash?
- Xây dựng Proc để truyền tham số trong ASM?
- Sử dụng hàm RtlAdjustPrivilege để cài đặt quyền DebugProcess trên Windows 7?
- SetWinEventHook AccessibleObjectFromEvent ?
- Lấy handle của control khác khi biết class và instance?
- sử dụng các hàm của dll sau khi inject vào applicaton đang chạy như thế nào ?
- Tràn bộ nhớ khi ghép code C lên win32 API, nguyên nhân và cách khắc phục ?
- Giao tiếp giữa các process Sử dụng TCP
-
23-09-2015, 01:24 PM #2Junior Member
- 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)>
Ngoại trừ một số ít trường hợp rãnh mũi - má và “râu rồng silicon” xuất hiện sớm, có khi từ tuổi thanh niên do cơ địa, còn lại, đại đa số do căn do lão hoá đã gây nên ba diễn biến: Giảm mô xương gò...
Cách thẩm mỹ má ở tuổi trung niên...