我的分布式服务器组件 在本地机和远程机上都有,但是我想启动远程机的组件, 改怎么写创建组件的代码呢?
我不想删掉本机上的组件和注册表注册项~~~ 以便代码改一下就可以随便启动远程的或者本机的.我先在这里谢谢你们了~~~
我不想删掉本机上的组件和注册表注册项~~~ 以便代码改一下就可以随便启动远程的或者本机的.我先在这里谢谢你们了~~~
解决方案 »
- WaitForSingleObject和CreateThread在dll中的初始化里运行的问题,急!!!!!!
- 创建文件目录?
- 请问如何使编辑框成为透明的啊?为何重载OnCtlColor和EraseBkGrnd都不行啊?
- 怎样才能把对话框中的一个回车消息传给它的一个子控件
- 取得字体的外框后,如何填充阿!
- 怎么设置Serv-U作网络ftp服务器?在线等!100分
- 一个不复杂的算法的问题,请加入计算!
- 一个非模式对话框, 能显示对话框, 但里面的控件都不见了? ?
- GetWindowText获取是乱码
- 复制黏贴方面的问题
- 在vc中使用ado查询纪录问题,select * from ghb where rownum<2 for update nowait为何查询后结果集为空?
- 在MDI窗口下,如何使非模式的CDialog只在MDI的客户区活动?而且最大化只占满客户区?
void CInvokeCom01Dlg::OnButton2()
{
// TODO: Add your control notification handler code here
//组件库初始化
HRESULT hr = CoInitialize(NULL);
//安全代码初始化
hr = CoInitializeSecurity(
NULL,
-1,
NULL,
NULL,
RPC_C_AUTHN_LEVEL_DEFAULT, //代理的访问默认验证,这个和服务器端dcomcnfg配置时【默认属性】中【默认身份验证级别】所对应,例如:RPC_C_AUTHN_LEVEL_DEFAULT对应的是“默认值”,RPC_C_AUTHN_LEVEL_NONE对应的则是“无”
RPC_C_IMP_LEVEL_IDENTIFY, //代理扮演级别,和服务器端dcomcnfg配置时【默认属性】中【默认模拟级别】,对应的dcomcnfg配置图:
NULL,
0,
NULL
);
//创建对象实例,并返回IUnknown 指针
COSERVERINFO ServerInfo={0,L"Zidane",NULL,0};//组件服务器信息,”zht”为组件服务器的计算机名字
MULTI_QI MultiQi={&IID_IUnknown,NULL,NOERROR};
hr=CoCreateInstanceEx(CLSID_Obj01,NULL,CLSCTX_REMOTE_SERVER,&ServerInfo,1,&MultiQi);// CLSCTX_REMOTE_SERVER为远程进程外组件
IUnknown* pUnknown = (IUnknown*) MultiQi.pItf;// 得到IUnknown指针
//通过IUnkonwn指针去查询接口指针,返回IAccount指针
IObj01* pFoo = NULL;
hr = pUnknown->QueryInterface(IID_IObj01,(void**)&pFoo);
hr = CoCreateInstance(CLSID_Obj01, NULL, CLSCTX_INPROC_SERVER| CLSCTX_INPROC_HANDLER| CLSCTX_LOCAL_SERVER| CLSCTX_REMOTE_SERVER, IID_IObj01, (void**)&pFoo);
if (SUCCEEDED(hr) && (pFoo != NULL))
{
int num=1;
pFoo->changeInt(&num);
pFoo->Release();
CString s;
s.Format("The number is : %d",num);
MessageBox(s);
}
else
{
CString msg;
msg.Format("%ld",hr);
AfxMessageBox(msg);
}
//Iunknown接口释放
pUnknown->Release();
CoInitialize(NULL);
}2、配置客户端、服务器端,这个可以搜索一下版面。
还有我不清楚,如果本机注册表已经注册了该组件,那么想你说做的能不能启动远程的呢? dcom有自己优化的,优先启动本机的组件来优化组件的调用~~~