![]() |
Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"
Hallo!
Ich versuche gerade ein paar hundert Funktionen aus einer C-Bibliothek für Delphi nutzbar zu machen und scheitere schon beim Buchstaben "b". Ist nicht das erste mal, dass ich so etwas mache und bisher lief es irgendwann auch irgendwie. In dem Fall ist es aber egal, wie ich die Variable deklariere, konstruiere oder übergebe, es gibt immer eine Zugriffsverletzung.
Code:
Sieht doch eigentlich gar nicht so schlimm aus. Das Feld soll mit [ndim][lenvals] dimensioniert werden. Ich hoffe jemand von euch hat da mehr Ahnung vom Thema.
long bschoc (const char * value,
long ndim, long lenvals, const void * array, const long * order) |
AW: Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"
Hallo,
Zitat:
Hast Du Bsp.-Code in C? Mir fällt da wieder PChar/PAnsiChar ein. |
AW: Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"
Es sind generell die Ansi-Versionen.
Einen einzelnen Code habe ich nicht, probiert habe ich in etwa 'Array of AnsiString/PAnsiString', 'Array of Array of AnsiChar/PAnsiChar/Byte' als dynamische Felder oder nicht. Als normale Variable mit const oder var, als typisierten Zeiger oder einfachen. Ein richtiges Beispiel habe ich auch nicht.
Code:
Let the input arguments array and order contain the following elements:
array order "FEYNMAN" 1 "BOHR" 2 "EINSTEIN" 0 "NEWTON" 4 "GALILEO" 3 Then bschoc_c ( "NEWTON", 5, lenvals, array, order ) == 3 bschoc_c ( "EINSTEIN", 5, lenvals, array, order ) == 2 bschoc_c ( "GALILEO", 5, lenvals, array, order ) == 4 bschoc_c ( "Galileo", 5, lenvals, array, order ) == -1 bschoc_c ( "BETHE", 5, lenvals, array, order ) == -1 |
AW: Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"
Hallo,
long bschoc (const char * value, long ndim, long lenvals, const void * array, const long * order) Hm, ich verstehe im Moment auch gar nicht, was die Parameter machen. Steht aber zumindestens schon mal hier ![]() Die Beispiele sind total MurKs (für mich). Es gibt im ganzen Internet nicht einen Delphi-Link für bschoc -> Ich bin raus ;) |
AW: Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"
Zitat:
|
AW: Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"
Zitat:
also Fixe längen in Etwa als Delphi Array: Valuetype = Array[5, 30] of Ansichar; // [ndim][lenvals] |
AW: Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"
Zitat:
function bschoc( Value: PAnsichar; ndim: Integer; lenvals: Integer; array: PPAnsiChar; order: PInteger): Integer; cdecl; Für den Array könntest Du je nach Bedarf eine Variable vom Typ array [0..N] of PAnsiChar oder auch TArray<PAnsiChar> (wenn die Zahl der Element variable ist) verwenden und dann die Addresse des ersten Elementes des Arrays übergeben. Was irgendwie nicht ins Bild passt ist der "ndim" Parameter, der erweckt in mir den Verdacht, dass man der Funktion eigentlich einen mehrdimensionalen array übergeben kann. Dann sollte lenvals aber als long * lenvals definiert sein, damit man damit die Zahls der Elemente pro Dimension übergeben kann. Das Beispiel übergibt die Zahl der Elemente in "ndim" und zeigt nicht, was lenvals da sein soll. |
AW: Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"
Zitat:
[ndim][lenvals] ist schon richtig, das Teil ist ein mix aus c un Fortran, Fortran arbeitet nur mit fixen längen und kennt kein Char* Deshalb als ein Buffer mit festen Eintragslängen, lenvals ist die Stringlänge pro Reihe nur so hingeschrieben zum Zugriff aus Delphi
Delphi-Quellcode:
type
const colwidth = 40-1; rows = 50-1; TRow = array[0..colwidth] of ansichar; PBschocArray= ^TBschocArray; TBschocArray = Array[0..rows] of Trow; myArray : TBschocArray; myOrders : Array[0..rows] of integer; // Füllen dann res := bschoc ('EINSTEIN' rows, colwidth, @myArray, @myOrders); |
AW: Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"
Musste ja so sein. Es lag gar nicht an den Strings. Der letzte Parameter muss auch ein Array (Vector) sein. Peinlich, peinlich.
Aber danke für eure Hilfe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 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