ATL创建的com,编译通过,注册不成功,小弟我在注册表里查了没有注册下那个GUID,但是同样的程序在别的电脑下可以注册和运行
ATL创建的com,编译通过,注册不成功,我在注册表里查了没有注册上那个GUID,但是同样的程序在别的电脑上可以
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)
[解决办法]
官方規定 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 可以更簡單
[解决办法]接口用BSTR等类型