读书人

ATL创建的com编译通过注册不成功

发布时间: 2013-01-02 13:08:44 作者: rapoo

ATL创建的com,编译通过,注册不成功,我在注册表里查了没有注册上那个GUID,但是同样的程序在别的电脑上可以注册和运行。
如题,我建了很简单的ATL工程测试也是一样的,编译成功,就是注册不成功,同样是win7系统,同样的代码,那台电脑可以运行,而且我把管理员权限都调到最低。
编译显示是这样的:
Generating Code...
Linking...
Creating library Debug/mycomservice.lib and object Debug/mycomservice.exp
Performing registration
mycomservice.dll - 0 error(s), 9 warning(s)。

各位大神,求解释啊,在线等。

[解决办法]
手动注册看看?
UAC权限让用户提升。
右击图标以管理员身份运行看看
[解决办法]
STDMETHODIMP CFirst::test1(VARIANT *mPara)

VARIANT szStr1;
CString strData = _T("hello");
BSTR bstr = strData.AllocSysString();
szStr1.vt = VT_BSTR;
szStr1.bstrVal = bstr;
SysFreeString(bstr);

if(pFirst->test1(&szStr1) == S_OK)


[解决办法]

引用:
STDMETHODIMP CFirst::test1(VARIANT *mPara)

VARIANT szStr1;
CString strData = _T("hello");
BSTR bstr = strData.AllocSysString();
szStr1.vt = VT_BSTR;
szStr1.bstrVal = bstr;
SysFr……



官方定 VARIANT 使用前要先 Install ::VariantInit
使用完要清除 ::VariantClear

VARIANT szStr1;

::VariantInit(&szStr1);
szStr1.vt = VT_BSTR;
szStr1.bstrVal = SysAllocString(OLESTR("hello"));

if(pFirst->test1(szStr1) == S_OK)
AfxMessageBox("成功!");
else
AfxMessageBox("失败!");

::VariantClear(&szStr1);

如果的用 COM SDK 方式 ,也可以用 CComVariant 或是 _variant_t 可以更


[解决办法]
引用:
引用:win7中,这个管理员并不是超级用户,只有Administrator才是超级管理员

不好意思,这几天出差了,没来得及回帖。再请教您一个问题:
ATL创建COM组件,我想从客户端传入一个字符串过来,请问在接口处增加方法的时候,接收参数的类型应该选哪一个?直接使用string类型会不识别。谢谢您!

接口用BSTR等类型

读书人网 >VC/MFC

热点推荐