bonjour,
J'ai une DLL qui me donne quelque soucis.
J'apelle une fonction qui le retourne unPChar. De temps en temps, les 2 ou 3 derniers caractères de la valeur de retour est remplcé par un caractère à prioris au hasard.
Voici comment la Fonction est defini
La définition dans le programme de test.
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 function BrowseTractImage( directory : PChar; ARasterExtensions : Pchar; AVectorExtensions : Pchar; AList : Pchar; ABarBackground : pointer; AXmlName: Pchar; ADllName: PChar; IvBinaryDictionary: Pointer ) : PChar ; stdcall; export; var ABarBackgroundBitmap: ^TBitmap; TempList: TStringList; Sdirectory : String; SAName : String; SARasterExtensions : String ; SAVectorExtensions : String ; SAList : String; SAXmlName: String; SADllName: String; PIvBinaryDictionary : ^TIvBinaryDictionary; AIvBinaryDictionary: TIvBinaryDictionary; begin Sdirectory := directory; SAName := '' ; SARasterExtensions := ARasterExtensions; SAVectorExtensions := AVectorExtensions; SAList := AList ; SAXmlName := AXmlName ; SADllName := ADllName ; PIvBinaryDictionary := IvBinaryDictionary; AIvBinaryDictionary := PIvBinaryDictionary^; CoInitialize(nil); ABarBackgroundBitmap := ABarBackground; TempList := TStringList.create; try BrowseForImage(nil, directory , SAName, SARasterExtensions, sAVectorExtensions, TempList, ABarBackgroundBitmap^, SAXmlName, SADllName, AIvBinaryDictionary); GetMem(result, length(sAName) + 5); Result:= PAnsiChar(sAName) finally TempList.Free; end; CoUninitialize; end;
L'apelle de la fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 TBrowseTractImage = function ( directory : Pchar; ARasterExtensions : Pchar; AVectorExtensions : Pchar; AList : Pchar; ABarBackground : pointer; IniName: Pchar; DllName: Pchar; IvBinaryDictionary: Pointer) : Pchar ; stdcall; // ImageBrowser.dll;
J'ai fait toutes sorte d'essai suivant mes idées et celle que j'ai pus trouver sur internet, mais la, je séche.
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 var ParametersBrowser : Pchar; ABkgd: TBitmap; CloseThemes: TCloseThemes; BrowseTractImage: TBrowseTractImage; SName: String; begin // name := GetMemory(4096); // ParametersBrowser := GetMemory(4096); if DllHandle = 0 then DllHandle := LoadLibrary(PAnsiChar('ImageBrowser.dll')); // LoadLibrary in uses Windows try if DllHandle <> 0 then begin @CloseThemes:= GetProcAddress(DllHandle, 'CloseThemes'); @BrowseTractImage := GetProcAddress(DllHandle, 'BrowseTractImage'); ABkgd := TBitmap.Create; try ParametersBrowser := ''; ABkgd.Assign(img1.Picture.Bitmap); SName := BrowseTractImage( '', '*.gif;*.bmp;*.jpg;*.jpeg;*.tif;*.Png;*.tga', '*.wmf;*.emf;*.eps', ParametersBrowser, @ABkgd, 'Essai Ini.xml', 'TractConfig.Dll', @IvBinaryDictionary1 ); Image1.Visible := False; if SName <> '' then begin Label1.Caption := string(Sname); Image1.Picture.LoadFromFile(Label1.Caption); Image1.Visible := True; end; ; finally ABkgd.Free; end; CloseThemes; end; finally end;
Merci
Partager