Visual studio RegisterActiveObject在服务器上返回成功,但GetObject在任何客户端上都不工作?
我已经在创建一个简单的exe COM服务器上工作了2天,我已经在网络上测试了任何东西,但仍然不工作! 我用ATL创建了一个简单的对象,并用ATL RegisterClassObjects和RegisterActiveObject注册了接口,它返回SUCCESS,但任何客户端都不能使用GetObject方法获取对象,但CreateObject可以工作 这是我的项目文件: 有人能帮我吗?我真的需要它,它是我项目的一部分。Visual studio RegisterActiveObject在服务器上返回成功,但GetObject在任何客户端上都不工作?,visual-studio,com,atl,Visual Studio,Com,Atl,我已经在创建一个简单的exe COM服务器上工作了2天,我已经在网络上测试了任何东西,但仍然不工作! 我用ATL创建了一个简单的对象,并用ATL RegisterClassObjects和RegisterActiveObject注册了接口,它返回SUCCESS,但任何客户端都不能使用GetObject方法获取对象,但CreateObject可以工作 这是我的项目文件: 有人能帮我吗?我真的需要它,它是我项目的一部分。 谢谢。首先,你需要检查你是否成功地将你的东西放到了ROT上。寻找irotvi
谢谢。首先,你需要检查你是否成功地将你的东西放到了ROT上。寻找
irotview
(一些旧的SDK?)或类似的实用程序来确保这一点(更新-让你得到它)
如果条目在那里(或者您需要检查创建ROT条目的API调用的错误代码),则客户端有两种可能无法访问条目的选项:
我终于用这段代码解决了我的问题:(CoreRegisterClassObject仍然不工作!)
HRESULT-hr;
CYourObject*your=new-ccombject();
void*p=NULL;
您的->查询界面(IID\U IUnknown,&p);
IUnknown*var=(IUnknown*)p;
德沃德博士;
IRunningObjectTable*保护;
IMoniker*pMon;
LPOLESTR monikerName;
hr=GetRunningObjectTable(NULL,&pROT);
hr=StringFromCLSID(CLSID\u对象和monikerName);
LPOLESTR delim=L“!”;//名字对象分隔符(设置为!始终)
hr=CreateItemMoniker(delim、monikerName和pMon);
hr=pROT->Register(ROTFLAGS\u registationkeepsalive、var、pMon和pdwRegister);
CLSID id;
hr=CLSIDFromProgID(L“MyAtlProject.YourObject”、&id);
根据OP的问题,我无法评论此答案的适用性,但我非常感谢@Roman回来编辑答案并提供RotView的工作链接。
HRESULT hr;
CYourObject *your = new CComObject<CYourObject>();
void *p = NULL;
your->QueryInterface(IID_IUnknown,&p);
IUnknown *var = (IUnknown*)p;
DWORD pdwRegister;
IRunningObjectTable *pROT;
IMoniker *pMon;
LPOLESTR monikerName;
hr = GetRunningObjectTable(NULL,&pROT);
hr = StringFromCLSID(CLSID_YourObject, &monikerName);
LPOLESTR delim = L"!"; // moniker delimiter (set to ! always)
hr = CreateItemMoniker(delim,monikerName,&pMon);
hr = pROT->Register(ROTFLAGS_REGISTRATIONKEEPSALIVE,var,pMon,&pdwRegister);
CLSID id;
hr = CLSIDFromProgID(L"MyAtlProject.YourObject",&id);