Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   String array als Parameter für externe DLL? (https://www.delphipraxis.net/153261-string-array-als-parameter-fuer-externe-dll.html)

gammatester 27. Jul 2010 15:16

AW: String array als Parameter für externe DLL?
 
Den Teil aus dem ersten Beitrag:
Code:
__int64 lCount, __int64* lIndex, __int64* lRetCode
hat Du mit
Delphi-Quellcode:
ATemplatesCount: Cardinal; var ATemplateIndex: Cardinal; var ARetCode: Cardinal
übersetzt. Richtig ist, daß die Pointer __int64* mit Var-Parametern belegt sind. Allerdings werden doch 64 Bit von der DLL zurückgeschrieben, Deine Cardinals haben 32 Bits, und die oberen überzähligen 32 Bit werden dann irgendetwas anderes auf dem Delphi-Stack überschreiben.

pantarhei 30. Jul 2010 09:50

AW: String array als Parameter für externe DLL?
 
Habe es dann endlich doch noch gefunden. Problem war das dynamische Array. Damit kam die C Dll nicht zurecht. Ich vermute mal wegen dem length prefix. Hier der Vollständigkeit wegen noch wie es jetzt funktioniert:

Type
Delphi-Quellcode:
type
  TArrayOfWideString= array[0..999] of WideString;
Deklaration
Delphi-Quellcode:
function Identify(var ATemplates: TArrayOfWideString; ATemplatesCount: int64; var ATemplateIndex: int64; var ARetCode: int64): Integer; cdecl; external 'Identify.dll';
Verwendung
Delphi-Quellcode:
var
  templateIndex, retCode: int64;
  templates: TArrayOfWideString;
  retval: integer;

//TODO: range checking for TArrayOfWideString needed

templates[0] := 'template1';
templates[1] := 'template2';

retVal := Identify(templates, 2, scanIndex, retCode);


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:25 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz