Bonjour,
j'essaie de réaliser un composant permettant le partage d"un répertoire sur le réseau, et cela quelque soit l'OS (win 98/2000/XP etc).
Pour cela j'utilise les API Windows :
- NetApi32.dll pour Win2000/XP...
- SvrApi.dll pour Win98 ...
Cependant malgré le controle de version de l'OS, l'application déclenche une erreur dû à l'absence d'une des dll (celle qui n'est pas concerné par l'OS).
En utilisant sous WinXP par exemple NetShareAddNT(...) et NetShareAddNT(...) uniquement, le fait de déclarer les fonctions pour Win9x provoque leur chargement (Malgré le fait qu'elles ne soient pas appelées) et donc une erreur étant donné que SvrApi.dll n'existe pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 function NetShareAddNT(servername: LPWSTR; level: DWORD; buf: pSHARE_INFO_2; parm_err: LPDWORD):LongWord; stdcall; external 'netapi32.dll' name 'NetShareAdd'; function NetShareDelNT(servername: LPWSTR; netname : LPWSTR; reserved : DWORD):LongWord; stdcall; external 'netapi32.dll' name 'NetShareDel'; function NetShareAdd9x(servername: LPWSTR; level: DWORD; const buf: Pointer; parm_err: PDWORD): DWORD; stdcall;external 'SvrApi.dll'; function NetShareDel9x(servername: LPWSTR; netname: LPWSTR; reserved: DWORD): DWORD; stdcall;external 'SvrApi.dll'; ..... ..... if isNT then with TShareFileWinNt.Create do begin rep := ShareFile(nil,2,Share,ParamErr); free; end else begin with TShareFileWin9x.Create do rep := ShareFile(nil, 2, SHARE, ParamErr); free; end;
Comment chargé seulement la DLL concernée ?
(il existe aussi peut etre la possibilité de fournir les 2 DLL ou de créer 2 applications consoles mais je préfèrerai éviter cela)
merci
Partager