Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi MyExportedFunction with VAR Params : ARRAY OF PChar? (https://www.delphipraxis.net/35570-myexportedfunction-var-params-array-pchar.html)

HPW 9. Dez 2004 06:56


MyExportedFunction with VAR Params : ARRAY OF PChar?
 
Ich möchte folgende exportierte Function aus meiner DLL aus einer anderen Programmiersprache aus aufrufen:

Delphi-Quellcode:
MyExportedFunction( Param1 : INTEGER; VAR Params : ARRAY OF PChar )
'Param1 : INTEGER' ist dann ein 32Bit Integer

Ist aber 'VAR Params : ARRAY OF PChar' einfach eine Folge von 32Bit Addressen (Pointer auf PChars)?

Dies scheint aber nicht zu funktionieren!
Was erwartet delphi da?

jim_raynor 9. Dez 2004 07:08

Re: MyExportedFunction with VAR Params : ARRAY OF PChar?
 
Das liegt daran, wie dynamische Array's in Delphi verwaltet werden. Dazu gab es hier schön öfter was. Ein dynamisches Array ist ein Pointer auf einen Speicherbereich, bei dem die ersten vier Bytes die Länge darstellen und danach die einzelnen Elemente (in deinem Fall viele PChars). übergibts du jetzt ein dynamisches Array als var Paramater dann wird quasi ein Zeiger auf einen Zeiger übergeben.

Wenn du kompatibel zu anderen Programmiersprachen sein möchtest musst du auf Strings und dynamische Arrays verzichten.

Du könntest allerdings ein statisches Array daraus machen und nur die Adresse übergeben
Delphi-Quellcode:
type
  PPCHarArray = ^TPCharArray;
  TPCharArray = Array[0..65535] of PChar;

MyExportedFunction( Param1 : INTEGER; Params : PPCharArray)
Dann sollte man entweder mit Params^[0] oder Params[0] (weiss jetzt nicht was funktioniert) auf die Elemente zugreifen können. Allerdings brauchst du dann noch einen Paramater um die Elementanzahl zu übergeben.

Ob es generell mit PChars korrekt klappt kann ich jetzt nicht versprechen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:47 Uhr.

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