AW: String array als Parameter für externe DLL?
Den Teil aus dem ersten Beitrag:
Code:
hat Du mit
__int64 lCount, __int64* lIndex, __int64* lRetCode
Delphi-Quellcode:
ü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.
ATemplatesCount: Cardinal; var ATemplateIndex: Cardinal; var ARetCode: Cardinal
|
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:
Deklaration
type
TArrayOfWideString= array[0..999] of WideString;
Delphi-Quellcode:
Verwendung
function Identify(var ATemplates: TArrayOfWideString; ATemplatesCount: int64; var ATemplateIndex: int64; var ARetCode: int64): Integer; cdecl; external 'Identify.dll';
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. |
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