请问如何在Delphi中声明Windows API函数(比如ShellExecute这个函数,Delphi就没有集成进去)很急!!!

Linux2001 2001-03-28 05:44:00
...全文
298 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Linux2001 2001-04-15
  • 打赏
  • 举报
回复
奇怪,我明明加了分的么!!!???
summernightrain 2001-04-13
  • 打赏
  • 举报
回复
为什么对我的回答完全没反应!!????
summernightrain 2001-04-04
  • 打赏
  • 举报
回复
函数的参数类型不符当然不行!
Function ABC(DOCName:Char):Longint;看你的贴子好像是一个打开文档的操作!
所以这个函数是不是写错了,应该是Function ABC(DOCName:pChar):Longint吧!!
字符型怎么表示一个文件名!

如果是这样的话那么你的ZS就应该等于ZS:=ABC(pchar(ComboBox1.Text))了!

summernightrain 2001-04-03
  • 打赏
  • 举报
回复
你的参数类型不符,当然不行!!

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;
神奇的肚肚 2001-03-30
  • 打赏
  • 举报
回复
大部分人答对了,我就不说了
Linux2001 2001-03-30
  • 打赏
  • 举报
回复
这些问题我都解决了,但是如果声明一个函数比如说:Function ABC(DOCName:Char):Longint;但是在调用ShellExecute它时,ShellExecute(Hnd,'open',DOCName,'','c:\',1);再在一个按钮的单击事件中加入这个函數比如说:加入这样一行var ZS :longint;
begin
ZS:=ABC(ComboBox1.text);{窗口中加入了一个ComboBox控件},后根本不行,调试窗口中总是显示函数的参数类型不是TCaption类,如果更改参数类型,又和ShellExecute中第三个参数类型不符,这该怎么办?JJJJJJJJ
Linux2001 2001-03-30
  • 打赏
  • 举报
回复
这些问题我都解决了,但是如果声明一个函数比如说:Function ABC(DOCName:Char):Longint;但是在调用ShellExecute它时,ShellExecute(Hnd,'open',DOCName,'','c:\',1);再在一个按钮的单击事件中加入这个函數比如说:加入这样一行var ZS :longint;
begin
ZS:=ABC(ComboBox1.text);{窗口中加入了一个ComboBox控件},后根本不行,调试窗口中总是显示函数的参数类型不是TCaption类,如果更改参数类型,又和ShellExecute中第三个参数类型不符,这该怎么办?JJJJJJJJ
ruolink 2001-03-30
  • 打赏
  • 举报
回复
怎么不给分呀?真没面子:)
wu_yongcai 2001-03-30
  • 打赏
  • 举报
回复
Delphi5里,在Uses 语句后添加一个ShellApi即可调用该函数
summernightrain 2001-03-30
  • 打赏
  • 举报
回复
单就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;
summernightrain 2001-03-30
  • 打赏
  • 举报
回复
单就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;
kasteboy 2001-03-29
  • 打赏
  • 举报
回复
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这两个单元文件中
OK_boom 2001-03-29
  • 打赏
  • 举报
回复
因为ShellExecute是一个 Shell函数,它的声明不集成在Windows 单元中, 而是
独立放在ShellApi单元中, 所以在USES部分加上ShellAPI就行了。
iamfool 2001-03-28
  • 打赏
  • 举报
回复
关注
iamfool 2001-03-28
  • 打赏
  • 举报
回复
关注
xycleo 2001-03-28
  • 打赏
  • 举报
回复
delphi是user Shellapi
c++builder是 include"shellapi.h"
rh 2001-03-28
  • 打赏
  • 举报
回复
就是uese shellapi
楼顶的是对的
ruolink 2001-03-28
  • 打赏
  • 举报
回复
.......
....
implementation

uses ShellAPI;

{$R *.DFM}
...........
ruolink 2001-03-28
  • 打赏
  • 举报
回复
具体我记不清了
好像是在 uses下面加上 ShellAPI
这样好象就行了:)
我记不清了,你去试试:)祝你成功!

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧