AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"
Thema durchsuchen
Ansicht
Themen-Optionen

Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"

Ein Thema von Ydobon · begonnen am 6. Feb 2019 · letzter Beitrag vom 7. Feb 2019
Antwort Antwort
Ydobon

Registriert seit: 3. Mär 2006
264 Beiträge
 
Delphi 11 Alexandria
 
#1

Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"

  Alt 6. Feb 2019, 21:45
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:
  long bschoc (const char  * value,
               long          ndim,  
               long          lenvals,
               const void  * array,
               const long  * order)
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.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"

  Alt 6. Feb 2019, 22:11
Hallo,

Zitat:
In dem Fall ist es aber egal, wie ich die Variable deklariere, konstruiere oder übergebe, es gibt immer eine Zugriffsverletzung.
Wo ist Dein bisheriger Code?
Hast Du Bsp.-Code in C?

Mir fällt da wieder PChar/PAnsiChar ein.
Heiko

Geändert von hoika ( 6. Feb 2019 um 22:13 Uhr)
  Mit Zitat antworten Zitat
Ydobon

Registriert seit: 3. Mär 2006
264 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"

  Alt 6. Feb 2019, 22:46
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"

  Alt 6. Feb 2019, 23:40
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

https://naif.jpl.nasa.gov/pub/naif/t.../bschoc_c.html

Die Beispiele sind total MurKs (für mich).
Es gibt im ganzen Internet nicht einen Delphi-Link für bschoc -> Ich bin raus
Heiko

Geändert von hoika ( 6. Feb 2019 um 23:45 Uhr)
  Mit Zitat antworten Zitat
Ydobon

Registriert seit: 3. Mär 2006
264 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"

  Alt 6. Feb 2019, 23:56
Steht aber zumindestens schon mal hier
Ja, da ist es auch her. Nachdem ich bisher nur die Funktionen übersetzt hatte, die ich gerade für meine Programme brauche, wollte ich mir mal das Komplettpaket vornehmen. Im Notfall wird sie halt in Delphi nachgebaut.
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"

  Alt 7. Feb 2019, 11:36
Hallo!
Code:
  long bschoc (const char  * value,
               long          ndim,  
               long          lenvals,
               const void  * array,
               const long  * order)
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.
So wie ich das sehe erwartet die function den value als fortlaufendes char Array(Byte) im Fortranstyle.
also Fixe längen
in Etwa als Delphi Array: Valuetype = Array[5, 30] of Ansichar; // [ndim][lenvals]
Fritz Westermann
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
701 Beiträge
 
Delphi 12 Athens
 
#7

AW: Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"

  Alt 7. Feb 2019, 12:57
Zitat:
long bschoc (const char * value,
long ndim,
long lenvals,
const void * array,
const long * order)
Ohne Dokumentation der Parameter kann man damit wenig anfangen. Dem Beispiel nach nach ist "array" in diesem Fall wohl ein Array von char *, d.h. der Parameter hätte eigenlich als const char** array deklariert sein müssen, wenn meine (lückenhafte) Kenntnis der C-Syntax korrekt ist. Eine mögliche Übersetzug wäre dann

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.
Peter Below
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"

  Alt 7. Feb 2019, 14:49
Zitat:
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.
Nee schau in die Documentation weiter oben verlinkt.....
[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);
Fritz Westermann
  Mit Zitat antworten Zitat
Ydobon

Registriert seit: 3. Mär 2006
264 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Immer wieder beliebt: C-DLL in Delphi diesmal "character string array"

  Alt 7. Feb 2019, 14:51
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:34 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