具体我记不清了
好像是在 uses下面加上 ShellAPI
这样好象就行了:)
我记不清了,你去试试:)祝你成功!

解决方案 »

  1.   

    .......
    ....
    implementationuses ShellAPI;{$R *.DFM}
    ...........
      

  2.   

    就是uese shellapi
    楼顶的是对的
      

  3.   

    delphi是user Shellapi
    c++builder是  include"shellapi.h"
      

  4.   

    unit UNetApi;interface
      uses windows, sysutils;  function NetUserAdd( Servername : LPWSTR ; Level : DWORD ; buf : Pointer;
                     var parm_err : DWORD ): DWORD ; stdcall;
    implementation  function NetUserAdd ;           external 'NetApi32.dll';end.
    你可以象上边一样声明需要的api函数,然后在程序中uses该文档即可
    在在这里是 uses unetapi;
    通常delphi把一部分api封装在 shellapi和shlobj这两个单元文件中
      

  5.   

       因为ShellExecute是一个 Shell函数,它的声明不集成在Windows 单元中, 而是
    独立放在ShellApi单元中,  所以在USES部分加上ShellAPI就行了。
       
      

  6.   

    Delphi5里,在Uses 语句后添加一个ShellApi即可调用该函数
      

  7.   

    单就ShellExecute来说uses shellapi绝对没问题!!如果是别的Dll中的函数就需要通过声明的方式调用该DLL中的函数,方法有两种:
      1.静态调用:
      在implementation的下一行添加这个函数的声明...
      例如:
      function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL';
      这个例子的就是声明在'KERNEL32.DLL'中的RegisterServiceProcess函数,声明后你就可以在程序中调用它了.
      2.动态调用:
      在一个过程或函数中,例如还是上面那个函数
      procedure ...
      var
        RegServPro:Function(dwProcessID, dwType: DWord):DWord;Stdcall;
      begin
        aLib:=LoadLibrary('Kernel32.dll');
          IF aLib>=32 then
            begin
              @RegServPro:=GetProcAddress(aLib,'RegisterServiceProcess');
              IF @RegServPro<>nil then
                 RegServPro(GetCurrentProcessID,1); //这里使用了这个函数...
              FreeLibrary(aLib);
           end;
      eng;
      
      

  8.   

    单就ShellExecute来说uses shellapi绝对没问题!!如果是别的Dll中的函数就需要通过声明的方式调用该DLL中的函数,方法有两种:
      1.静态调用:
      在implementation的下一行添加这个函数的声明...
      例如:
      function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL';
      这个例子的就是声明在'KERNEL32.DLL'中的RegisterServiceProcess函数,声明后你就可以在程序中调用它了.
      2.动态调用:
      在一个过程或函数中,例如还是上面那个函数
      procedure ...
      var
        RegServPro:Function(dwProcessID, dwType: DWord):DWord;Stdcall;
      begin
        aLib:=LoadLibrary('Kernel32.dll');
          IF aLib>=32 then
            begin
              @RegServPro:=GetProcAddress(aLib,'RegisterServiceProcess');
              IF @RegServPro<>nil then
                 RegServPro(GetCurrentProcessID,1); //这里使用了这个函数...
              FreeLibrary(aLib);
           end;
      eng;
      
      

  9.   

    这些问题我都解决了,但是如果声明一个函数比如说:Function ABC(DOCName:Char):Longint;但是在调用ShellExecute它时,ShellExecute(Hnd,'open',DOCName,'','c:\',1);再在一个按钮的单击事件中加入这个函數比如说:加入这样一行var ZS :longint;
     begin
       ZS:=ABC(ComboBox1.text);{窗口中加入了一个ComboBox控件},后根本不行,调试窗口中总是显示函数的参数类型不是TCaption类,如果更改参数类型,又和ShellExecute中第三个参数类型不符,这该怎么办?JJJJJJJJ
      

  10.   

    这些问题我都解决了,但是如果声明一个函数比如说:Function ABC(DOCName:Char):Longint;但是在调用ShellExecute它时,ShellExecute(Hnd,'open',DOCName,'','c:\',1);再在一个按钮的单击事件中加入这个函數比如说:加入这样一行var ZS :longint;
     begin
       ZS:=ABC(ComboBox1.text);{窗口中加入了一个ComboBox控件},后根本不行,调试窗口中总是显示函数的参数类型不是TCaption类,如果更改参数类型,又和ShellExecute中第三个参数类型不符,这该怎么办?JJJJJJJJ
      

  11.   

    你的参数类型不符,当然不行!!Function ABC(DOCName:Char):Longint中DOCName是char类型的,而ComboBox1.Text是String类型这两种参数类型不同,所以会报错。我看你ABC这个函数你是不是写错了,应该是这样的ABC(DOCName:PChar):LongInt。因为看你的程序应该是打开一个文档啊!!文档的名称怎么能用字符型呢?如果是我说的那样,那么你可以这样写应该就没有问题了!! var ZS :longint;
    begin
     ZS:=ABC(pchar(ComboBox1.text));
    end;
      

  12.   

    函数的参数类型不符当然不行!
    Function ABC(DOCName:Char):Longint;看你的贴子好像是一个打开文档的操作!
    所以这个函数是不是写错了,应该是Function ABC(DOCName:pChar):Longint吧!!
    字符型怎么表示一个文件名!如果是这样的话那么你的ZS就应该等于ZS:=ABC(pchar(ComboBox1.Text))了!