单就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;
单就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;
这些问题我都解决了,但是如果声明一个函数比如说:Function ABC(DOCName:Char):Longint;但是在调用ShellExecute它时,ShellExecute(Hnd,'open',DOCName,'','c:\',1);再在一个按钮的单击事件中加入这个函數比如说:加入这样一行var ZS :longint; begin ZS:=ABC(ComboBox1.text);{窗口中加入了一个ComboBox控件},后根本不行,调试窗口中总是显示函数的参数类型不是TCaption类,如果更改参数类型,又和ShellExecute中第三个参数类型不符,这该怎么办?JJJJJJJJ
这些问题我都解决了,但是如果声明一个函数比如说:Function ABC(DOCName:Char):Longint;但是在调用ShellExecute它时,ShellExecute(Hnd,'open',DOCName,'','c:\',1);再在一个按钮的单击事件中加入这个函數比如说:加入这样一行var ZS :longint; begin ZS:=ABC(ComboBox1.text);{窗口中加入了一个ComboBox控件},后根本不行,调试窗口中总是显示函数的参数类型不是TCaption类,如果更改参数类型,又和ShellExecute中第三个参数类型不符,这该怎么办?JJJJJJJJ
你的参数类型不符,当然不行!!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;
函数的参数类型不符当然不行! Function ABC(DOCName:Char):Longint;看你的贴子好像是一个打开文档的操作! 所以这个函数是不是写错了,应该是Function ABC(DOCName:pChar):Longint吧!! 字符型怎么表示一个文件名!如果是这样的话那么你的ZS就应该等于ZS:=ABC(pchar(ComboBox1.Text))了!
....
implementationuses ShellAPI;{$R *.DFM}
...........
楼顶的是对的
c++builder是 include"shellapi.h"
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这两个单元文件中
独立放在ShellApi单元中, 所以在USES部分加上ShellAPI就行了。
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;
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;
begin
ZS:=ABC(ComboBox1.text);{窗口中加入了一个ComboBox控件},后根本不行,调试窗口中总是显示函数的参数类型不是TCaption类,如果更改参数类型,又和ShellExecute中第三个参数类型不符,这该怎么办?JJJJJJJJ
begin
ZS:=ABC(ComboBox1.text);{窗口中加入了一个ComboBox控件},后根本不行,调试窗口中总是显示函数的参数类型不是TCaption类,如果更改参数类型,又和ShellExecute中第三个参数类型不符,这该怎么办?JJJJJJJJ
begin
ZS:=ABC(pchar(ComboBox1.text));
end;
Function ABC(DOCName:Char):Longint;看你的贴子好像是一个打开文档的操作!
所以这个函数是不是写错了,应该是Function ABC(DOCName:pChar):Longint吧!!
字符型怎么表示一个文件名!如果是这样的话那么你的ZS就应该等于ZS:=ABC(pchar(ComboBox1.Text))了!