在程序中,如何自动辨别当前是win98还是win2000,而加载SVRAPI.DLL或NETAPI32.DLL

zaneabc 2002-04-16 02:32:18
加精
因为SVRAPI.DLL和NETAPI32.DLL分别是win98和win2000下的动态链接库,所以需要根据操作系统而加载,否则会出错,所以,请问如何在程序中判断系统来加载不同的DLL。谢谢!
...全文
60 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zaneabc 2002-04-17
  • 打赏
  • 举报
回复
能够实现了,谢谢大家!
踢踏 2002-04-17
  • 打赏
  • 举报
回复
提供资料:

GetVersion取到的版本信息是一个整体,要取得某个主版本或者次版本很麻烦,用一个记录就可以简单解决了:
procedure TForm1.Button1Click(Sender: TObject);
Type
TVersion = packed record
WinVer,
WinRev,
DosRev,
DosVer: byte;
end;
var
V:Dword;
begin
V:=GetVersion;
Label1.Caption :=Format('Windows Version:%d.%d,Dos Version:%d.%d',[TVersion(V).WinVer,TVersion(V).WinRev,Tversion(V).DosVer,TVersion(V).DosRev]);
end;

其实在Delphi5中有一些系统常量可以使用(在sysutils单元):
Win32BuildNumber //Build版本号
Win32Platform //系统平台,2=Win32系统
Win32MajorVersion //主版本号
Win32MinorVersion //次版本号
Win32CSDVersion //其他版本信息,例如"Service Pack 2"


动态调用Dll:

typedef DWORD (WINAPI Fun) (DWORD,DWORD);
HINSTANCE hkDll=LoadLibrary("KERNEL32.DLL");
Fun*RegisterServiceProcess=(Fun*)::GetProcAddress(hkDll,"RegisterServiceProcess");
(*RegisterServiceProcess)(NULL,1);
FreeLibrary(hkDll);
===============
var
H: HWnd;
p: procedure(Handle: THandle; Path: PChar); stdcall;
begin
H := LoadLibrary(PChar('shdocvw.dll'));
if H <> 0 then
begin
p := GetProcAddress(H, PChar('DoOrganizeFavDlg'));
if Assigned(p) then p(Application.Handle, PChar(favpath));
end;
FreeLibrary(h);
end;
zaneabc 2002-04-17
  • 打赏
  • 举报
回复
有没有例程,研究研究 :)
bokei 2002-04-17
  • 打赏
  • 举报
回复
只要是用LoadLibrary装入的DLL,都要Free掉。
zaneabc 2002-04-17
  • 打赏
  • 举报
回复
还有,怎么给分啊?弄了好几次,说什么“只有未结 0分的贴子才可以结帐”
zaneabc 2002-04-17
  • 打赏
  • 举报
回复
对于调用系统中的dll,程序退出前不用free掉吧?
bokei 2002-04-16
  • 打赏
  • 举报
回复
你现在用的是静态连接,不可以在程序启动的时候动态指定。

如果你动态装载DLL就可以。
查查MSDN里的
LoadLibrary、GetProcAddress、FreeLibrary三个函数。
zaneabc 2002-04-16
  • 打赏
  • 举报
回复
是:

应该怎样修改,使能适合98或2000的操作系统而自动调用???

初次使用dll,还不清楚调用的方法,谢谢了!

zaneabc 2002-04-16
  • 打赏
  • 举报
回复
其实我是想知道具体如何调用:

...

function NetShareAdd(ServerName: PChar; ShareLevel: SmallInt; Buffer: Pointer; Size: Word): Integer; StdCall;
function NetShareDel(ServerName: PChar; NetName: PChar; Reserved: Word): Integer; StdCall;

implementation

...

function NetShareAdd; external 'SVRAPI.DLL';
function NetShareDel; external 'SVRAPI.DLL';
//win98下是用这SVRAPI.DLL
//win2000下用NETAPI32.DLL


function ShareResource(...): Integer;
var
...
begin
...
Result := NetShareAdd(...));
end;

function DeleteShare(...): Integer;
var
...
begin
...
Result := NetShareDel(...));
end;


然后,应该这样修改,使能适合98或2000的操作系统而自动调用

初次使用dll,还不清楚调用的方法,谢谢了!
zx_wang 2002-04-16
  • 打赏
  • 举报
回复
var VI: TOSVersionInfo;

begin
VI.dwOSVersionInfoSize := SizeOf(VI);
GetVersionEx(VI);
with VI do
begin
case dwPlatformID of
VER_PLATFORM_WIN32S:
VER_PLATFORM_WIN32_WINDOWS //do your prmg :;
VER_PLATFORM_WIN32_NT //do your prmg :;
end;
end;
end;


taidy 2002-04-16
  • 打赏
  • 举报
回复
var VI: TOSVersionInfo;

begin
VI.dwOSVersionInfoSize := SizeOf(VI);
GetVersionEx(VI);
with VI do
begin
case dwPlatformID of
VER_PLATFORM_WIN32S: //do your prmg ;
VER_PLATFORM_WIN32_WINDOWS //do your prmg :;
VER_PLATFORM_WIN32_NT //do your prmg :;
end;
end;
end;

1,184

社区成员

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

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