VC6的MFC应用中集成COM的一个小问题

VC6的MFC应用中集成COM的一个小问题
问题是这样产生的:建立一个MFC应用程序,加入ATL支持,并加入一个ATL对象,然后在程序中创建如下
CComPtr < IMath >     spMath;
    HRESULT            hr        
=  NOERROR;
    hr 
=  spMath.CoCreateInstance(L " COMInMFC.Math.1 " );
    
if (SUCCEEDED(hr))
    
{
        spMath.Release();
    }
结果总是返回“无效的字符串”。我直接把COM对象new出来,再QueryInterface是没有问题的,很明显注册表没有注册正确。稀里哗啦修改一通,还是不正确。转到VS2003、VS2005按照类似做法完全没有问题,于是我开始怀疑难道我的VC6 IDE有问题?因为我以前从来没有遇到类似问题,印象中还模糊记得以前做过类似操作没有这样的问题。转到笔记本上再试一试,还是老样子。唉!先放一下,这是昨天的问题哈!
昨天晚上睡觉还惦记这这个问题,今天早上起床,胸口闷,还是不甘心,一定找出问题所在。打开工程,直接找写注册表的位置,发现拉,在InitATL函数中有这样一段:
LPTSTR lpCmdLine  =  GetCommandLine();  // this line necessary for _ATL_MIN_CRT
    TCHAR szTokens[]  =  _T( " -/ " );

    BOOL bRun 
=  TRUE;
    LPCTSTR lpszToken 
=  _Module.FindOneOf(lpCmdLine, szTokens);
    
while  (lpszToken  !=  NULL)
    
{
        
if (lstrcmpi(lpszToken, _T("UnregServer"))==0)
        
{
            _Module.UpdateRegistryFromResource(IDR_COMINMFC, FALSE);
            _Module.UnregisterServer(TRUE); 
//TRUE means typelib is unreg'd
            bRun = FALSE;
            
break;
        }

        
if (lstrcmpi(lpszToken, _T("RegServer"))==0)
        
{
            _Module.UpdateRegistryFromResource(IDR_COMINMFC, TRUE);
            _Module.RegisterServer(TRUE);
            bRun 
= FALSE;
            
break;
        }

        lpszToken 
= _Module.FindOneOf(lpszToken, szTokens);
    }
原来要注册一下啊,赶紧命令行执行一下:
D:\VC\Automation\COMInMFC\Debug\COMInMFC.exe /RegServer
然后创建对象,成功了,终于体会到:世上无难事,只怕有心人!

你可能感兴趣的:(VC6的MFC应用中集成COM的一个小问题)