建立一个没有MFC的控制台程序,创建IShellLink接口:
#include "stdafx.h"
#include<stdio.h>
#include<crtdbg.h>
#include<objbase.h>
#include<ShlGuid.h>
#include<ShObjIdl.h>
#pragma comment(lib,"ole32")
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr;
CoInitialize(NULL);
    IShellLink* pL=NULL;
    _ASSERT(SUCCEEDED(CoCreateInstance(CLSID_ShellLink,NULL,0,IID_IShellLink,(void**)pL)));
}
运行ASSERT失败。
这是为什么呢?

解决方案 »

  1.   

    我把第三个参数从0改成了CLSCTX_ALL还是不行
      

  2.   

    ..不要用assert,看看getlasterror返回值是什么
      

  3.   

    不直接SUCCEED函数 把返回值取出来 看看 就知道了
      

  4.   


    GetLastError()返回0,没有错误?
    但是CoCreateInstance返回E_INVALIDARG
    看起来我的参数有错。错在哪里呢?
      

  5.   

    IShellLink pL;
        _ASSERT(SUCCEEDED(CoCreateInstance(CLSID_ShellLink,NULL,0,IID_IShellLink,(void**)&pL)));
      

  6.   


    没有pL=NULL;的话,Debug会有错误
    Runtime check Failure: used uninitiailized pointer pL.
      

  7.   

    我知道了,最后一个参数要&
    !