Bonjour, j'utilise une DLL écrite en C. Il s'agit de "DDS.DLL" écrite par Bo Haglund (la référence en matière de Bridge)
http://privat.bahnhof.se/wb758135/br...mentation.html
Cette DLL comporte plusieurs fonctions.
J'utilise actuellement sans problème la fonction "CalcTTable" définie ainsi dans la doc :
CalcDDtable :struct ddTableDeal tableDeal,
struct ddTableResults * tablep

Les structures (packed records en delphi) sont définies de la manière suivante :
ddTableDeal : unsigned int cards[4][4]; //Encodes a deal. First index is hand. Hand encoding. Second index is suit. Suit encoding.
ddTableResults : int resTable[5][4]; // Encodes the solution of a deal ......

Lors de l'appel de la fonction, je passe comme paramètres la structure ddTableDeal (initialisée avec les valeurs nécessaires au calcul) et la structure ddTableResults qui me sert à récupérer les résultats du calcul.
Cette fonction renvoie un integer (1 si tout se passe bien, sinon un autre code approprié en fonction du type d'erreur) et "calcule " donc la structure ddTableResults que j'exploite ensuite dans mon programme. Pour cette fonction, tout va bien.

J'ai un problème pour la seconde fonction "Par" définie ainsi dans la doc :
Par : struct ddTableResults * tablep,
struct parResults *presp,
int vulnerable

Les structures de cette fonction sont définies de la manière suivante :
ddTableDeal : unsigned int cards[4][4]; //identique à la celle de la fonction "CalcTTable"
parResults : char parScore[2][16]; //First index is NS/EW.
char parContractsString [2][128]; //First index is NS/EW.

Lors de l'appel de cette fonction, je passe comme paramètres la structure ddTableDeal (initialisée avec les valeurs nécessaires calculées avec la fonction précédente ), vulnerable défini à 0, et la structure parResults qui doit me servir à récupérer les résultats du calcul.

Cette fonction me renvoie bien 1 (donc tout se passe sans erreur), mais les résultats que je récupère dans la structure "parResults" ne sont pas corrects. J'obtiens des caractères style asiatiques alors que je dois obtenir par exemple des résultats du style "NS:NS 23S,NS 23H"

voici un extrait de mon code :
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
 
Type 
TddTableDeal=packed Record
   Cards:array [0..3,0..3] of Integer;   
end;
 
 TddTableResults=packed Record    
   resTable:array [0..4,0..3] of Integer;
 end;
 
 PtrddTableResults =^TddTableResults;
 
 TparResults=packed Record
  parScore : array [0..1,0..15] of Char;           
  parContractsString : array [0..1,0..127] of Char; 
  vulnerable:integer;                                 
 end;
 PtrparResults =^TparResults;
 
..........
 
implementation
 
uses unit1;
 
  var MyDeal:Tdeal;
      futp:PtrFutureTricks;
      MyTableDeal:TddTableDeal;
      Tablep:PtrddTableResults;
      presp:PtrparResults;
 
 function CalcDDtable(TableDeal:TddTableDeal;Tablep:PtrddTableResults):integer; stdcall; external 'DDS.dll'; //Pas de problème pour cette fonction
 
 function Par(Tablep:PtrddTableResults;presp:PtrparResults;vulnerable:integer):integer; stdcall; external 'DDS.dll';
 
 procedure CalculDuPar(donne:string); // Calcul du Par
var i,j:integer;
    CodeRetour:integer;
    S:string;
 begin
  Resoudre_CalcDDtable(donne); //  Procédure qui fonctionne et qui me permet de récupérer le tableau resTable:array [0..4,0..3] of Integer
                                                // avec les bonnes valeurs. Ces valeurs sont stockées dans le tableau NbreLevees[i,j]  
  new(Tablep);                          
  for i:=0 to 4 do begin    
   for j:=0 to 3 do begin  
    Tablep.resTable[i,j]:=NbreLevees[i,j]; 
   end;
  end;
  new(presp);               
  CodeRetour:=Par(Tablep,presp,0);   // La function de Bo Haglund (renvoie 1 si tout se passe bien sinon autre code d'erreur)
 
  for i:=0 to 1 do begin
   for j:=0 to  15 do begin
     S:=S+presp.parScore[i,j];
   end;
  end;
  showmessage(S);  // C'est là que j'obtiens des caractères asiatiques au lieu par exemple  de "NS:NS 23S, NS23 H"
 
  for i:=0 to 1 do begin
   for j:=0 to  127 do begin
     S:=S+presp.parContractsString[i,j];
   end;
  end;
  showmessage(S);// C'est là que j'obtiens des caractères asiatiques au lieu par exemple  de "NS:NS 23S, NS23 H"
 
  dispose(Tablep);         
  dispose(presp);         
end;
Merci de votre aide (ça fait 8 jours que je bloque là-dessus !!)

Jean-Louis