一下是代码。是创建一个IE快捷方式到桌面的。
FORM下测试好好的。放到CONSOLE就不行了。。
请大牛帮看看那。谢谢
program Project1;
uses
  Windows, ActiveX,Comobj,Shlobj;const
   IID_IPersistFile: TGUID = (D1:$0000010B;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));//创建IE快捷方式函数
function CreateLink(aPathObj,ProgramArg,aPathLink,aDesc: string): boolean;
var
  sLink: IShellLink;
  PersFile: IPersistFile;
begin
  Result := false;
  if SUCCEEDED(CoCreateInstance(CLSID_ShellLink, nil,CLSCTX_INPROC_SERVER, IID_IShellLinkA, sLink)) then //创建接口实例成功
  begin
    sLink.SetPath(PChar(aPathObj));//设置要创建快捷方式的程序路径及其文件名
    sLink.SetDescription(PChar(aDesc));//设置对快捷方式的描述信息
    SLink.SetArguments(PChar(ProgramArg));// 目标文件参数
    if SUCCEEDED(sLink.QueryInterface(IID_IPersistFile,PersFile)) then//查询接口成功
    begin
      PersFile.Save(StringToOLEStr(aPathLink),TRUE);//保存快捷方式
      Result := true;
    end;
  end;
end;
begin
CreateLink('C:\Program Files\Internet Explorer\IEXPLORE.EXE','http://www.baidu.com','C:\Documents and Settings\Administrator\桌面\'+'启动 Internet Explorer 浏览器.lnk','查找并显示 Internet 上的信息和网站');
end.

解决方案 »

  1.   

    program Project1;
    uses
      Windows, ActiveX,Comobj,Shlobj;const
       IID_IPersistFile: TGUID = (D1:$0000010B;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));//创建IE快捷方式函数
    function CreateLink(aPathObj,ProgramArg,aPathLink,aDesc: string): boolean;
    var
      sLink: IShellLink;
      PersFile: IPersistFile;
    begin
      Result := false;
      CoInitialize(nil);
      if SUCCEEDED(CoCreateInstance(CLSID_ShellLink, nil,CLSCTX_INPROC_SERVER, IID_IShellLinkA, sLink)) then //创建接口实例成功
      begin
        sLink.SetPath(PChar(aPathObj));//设置要创建快捷方式的程序路径及其文件名
        sLink.SetDescription(PChar(aDesc));//设置对快捷方式的描述信息
        SLink.SetArguments(PChar(ProgramArg));// 目标文件参数
        if SUCCEEDED(sLink.QueryInterface(IID_IPersistFile,PersFile)) then//查询接口成功
        begin
          PersFile.Save(StringToOLEStr(aPathLink),TRUE);//保存快捷方式
          Result := true;
        end;
      end;
      CoUninitialize();
    end;
    begin
    CreateLink('C:\Program Files\Internet Explorer\IEXPLORE.EXE','http://www.baidu.com','C:\Documents and Settings\Administrator\桌面\'+'启动 Internet Explorer 浏览器.lnk','查找并显示 Internet 上的信息和网站');
    end.
      

  2.   

    没有初始化Com库  
    Coinitialize
      CoInitialize是 Windows提供的API函数,用来告诉 Windows以单线程的方式创建com对象。应用程序调用com库函数(除CoGetMalloc和内存分配函数)之前必须初始化com库。
      返回值S_OK : 该线程中COM库初始化成功S_FALSE 该线程中COM库已经被初始化 CoInitialize () 标明以单线程方式创建。
      使用 CoInitialize 创建可以使对象直接与线程连接,得到最高的性能。
      CoInitialize并不装载COM 库,它只用来初始化当前线程使用什么样的套间。使用这个函数后,线程就和一个套间建立了对应关系。线程的套间模式决定了该线程如何调用COM对象,是否需要列集等。
      CoInitialize ()并不会干扰客户和服务器之间的通信,它所做的事情是让线程注册一个套间,而线程运行过程中必然在此套间。