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).

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;
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.

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