Bonjour tout le monde,
J'essaie d'utiliser une DLL dynamiquement sans succès. L'utilisation statique marche très bien mais j'ai des violations d'accès des que j'essaie dynamiquement.
Statique :
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 procedure RolePDFBeginDoc(License, FileName, Title, Author, Subject, Keywords, Creator: PChar; PageWidth, PageHeight: integer); stdcall; external 'pdf.dll'; procedure RolePDFNewPage; stdcall; external 'pdf.dll'; procedure RolePDFEndDoc; stdcall; external 'pdf.dll'; function RolePDFGetDC: HDC; stdcall; external 'pdf.dll'; function RolePDFPageCount: integer; stdcall; external 'pdf.dll'; function RolePDFPageWidth: integer; stdcall; external 'pdf.dll'; function RolePDFPageHeight: integer; stdcall; external 'pdf.dll'; function RolePDFAddOutline(Title: PChar; ParentID, PageNo, Top: integer): integer; stdcall; external 'pdf.dll'; ... procedure TRolePDF.BeginDoc; var i: integer; s: string; begin s := ''; for i := 0 to License.Count - 1 do s := s + License[i]; RolePDFBeginDoc(PChar(s), PChar(FFileName), PChar(FTitle), PChar(FAuthor), PChar(FSubject), PChar(FKeywords), PChar(FCreator), FPageWidth, FPageHeight); end;
Dynamique :
L'erreur intervient à l'utilisation de la procedure après la ligne "if assigned(RolePDFBeginDoc) then" et elle est la suivante :
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 procedure TRolePDF.BeginDoc; Type TRolePDFBeginDoc = procedure (License, FileName, Title, Author, Subject, Keywords,Creator: PChar; PageWidth, PageHeight: integer); var i: integer; s: string; dllInstance : THandle; RolePDFBeginDoc : TRolePDFBeginDoc; begin s := ''; RolePDFBeginDoc := nil; for i := 0 to License.Count - 1 do s := s + License[i]; dllInstance := loadlibrary('pdf.dll'); if dllInstance <> 0 then begin try @RolePDFBeginDoc := GetProcAddress(dllInstance,pAnsiChar('RolePDFBeginDoc')); if assigned(RolePDFBeginDoc) then RolePDFBeginDoc(PChar(s), PChar(FFileName), PChar(FTitle), PChar(FAuthor),PChar(FSubject), PChar(FKeywords), PChar(FCreator), FPageWidth, FPageHeight); finally freeLibrary(dllInstance); end; end; end;
je joins le DLL. Si vous avez une idée...Violation d'accès à l'adresse xxxxxxx dans le module 'pdf.dll'. Lecture de l'adresse 0000034A
Partager