DCOM连接配置问题

贪玩的老鼠 2009-05-23 08:26:06
我创建了ExcelDllTest,ATL动态库,有一个ExcelDll组件!
配置(window xp)连本机测试:
1 在DCOM配置新增了一个ExcelDll Class(APPID正确)
2 然后选中DCOM配置,单击配置我的电脑
在默认属性中勾选在此计算机上启用分布COM,身份验证级别,默认模拟级别模拟
3 COM安全设置,访问权限 编辑限制有两个用户ANONYMOUS LOGON,everyone,默认安全限制有self,SYSTEM
启动权限 编辑限制有两个用户Administrators,everyone,默认 有三个用户Adminstrator ,interactive,system.
4. 选择我的COM组件ExcelDll Class单击右键-属性,
常规-身份验证级别设置为无,标识设置为交互式用户

我做了一个测试客服程序,
#import "E:\\1234\\ExcelDllTest\\Debug\\ExcelDllTest.dll" no_namespace
#pragma warning(push)
#pragma warning(disable : 4290)
const CLSID CLSID_ExcelDll = {0xC7241A41,0x2B2E,0x40D1,{0x96,0xBE,0xAA,0xF1,0x9E,0xBF,0xC3,0x51}};
const IID IID_IExcelDll = {0xDFDD2491,0x6154,0x4DD8,{0xBF,0x62,0x19,0xD4,0xF7,0xC6,0x79,0x74}};
void CreateExcel(IExcelDllPtr p,_bstr_t machine,COAUTHIDENTITY& id)
{
HRESULT hr=S_OK;
COAUTHINFO author_info;
COSERVERINFO server_info;
MULTI_QI mqi[1];
if (machine.length==0)
{
hr=p.CreateInstance(__uuidof(IExcelDll));
if (FAILED(hr))
_com_issue_error(hr);
}
else
{
ZeroMemory(&author_info,sizeof(author_info));
author_info.dwAuthnSvc=RPC_C_AUTHN_WINNT;
author_info.dwAuthzSvc=RPC_C_AUTHZ_NONE;
author_info.dwImpersonationLevel=RPC_C_IMP_LEVEL_IMPERSONATE;
author_info.dwCapabilities=EOAC_NONE;
author_info.pAuthIdentityData=&id;
ZeroMemory(&server_info,sizeof(server_info));
server_info.pwszName=machine;
server_info.pAuthInfo=&author_info;
mqi[0].pIID=&IID_IExcelDll;
mqi[0].pItf=static_cast<IUnknown*>(p);
hr=CoCreateInstanceEx(CLSID_ExcelDll,NULL,CLSCTX_REMOTE_SERVER ,
&server_info,1,mqi);//创建失败
}
if (FAILED(hr))
{
DWORD dd= ::GetLastError();//返回1008
// _com_issue_error(hr);
}
else if(FAILED(mqi[0].hr))
{
hr=mqi[0].hr;
p=NULL;
}
else
{
p.Attach(reinterpret_cast<IExcelDll*>(mqi[0].pItf));
}
}
int main(int arg,char* argv[])
{
HRESULT hr;
COAUTHIDENTITY author_id;
char user[64]={"pr74"};
char password[64]={"74"};
hr=::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);

if (FAILED(hr)) return 0;
ZeroMemory(&author_id,sizeof(author_id));
author_id.Flags=SEC_WINNT_AUTH_IDENTITY_ANSI;
author_id.User=reinterpret_cast<unsigned short*>(user);
author_id.UserLength=strlen(user);

author_id.Password=reinterpret_cast<unsigned short*>(password);
author_id.PasswordLength=strlen(password);
IExcelDllPtr pr;
CreateExcel(pr,"pr74",author_id);
if (pr)
pr->AddFile("d:\\123.txt");
CoUninitialize();
return 1;
}

测试连接老是失败,请高手帮忙解决,初学COM
...全文
175 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
贪玩的老鼠 2009-05-25
  • 打赏
  • 举报
回复
DLL是可以配置的,

自己搞定了!!!

哈哈:顶着有分
贪玩的老鼠 2009-05-25
  • 打赏
  • 举报
回复
启动了啊,DLL可以的,我看了COM说要用DLLHOST.EXE做代理,我也加了这个
贪玩的老鼠 2009-05-23
  • 打赏
  • 举报
回复
我的DCOM配置中一开始看不到ExcelDll Class
我自己再注册表中的APPID里新建了一个{0xC7241A41,0x2B2E,0x40D1,{0x96,0xBE,0xAA,0xF1,0x9E,0xBF,0xC3,0x51}};
oyljerry 2009-05-23
  • 打赏
  • 举报
回复
你的DCOM服务exe程序是否有启动,
WaistCoat18 2009-05-23
  • 打赏
  • 举报
回复
DCOM要是EXE吧,你DLL应该不行。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧