AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Job-Börse: Angebote und Gesuche Hallo suche Hilfe auf Stundenbasis in Ludwigsburg Delphi XE5

Hallo suche Hilfe auf Stundenbasis in Ludwigsburg Delphi XE5

Ein Thema von Ceruso · begonnen am 11. Jan 2021 · letzter Beitrag vom 13. Jan 2021
Antwort Antwort
Seite 1 von 2  1 2   
Ceruso

Registriert seit: 11. Jan 2021
5 Beiträge
 
#1

Hallo suche Hilfe auf Stundenbasis in Ludwigsburg Delphi XE5

  Alt 11. Jan 2021, 14:41
Hallo suche Hilfe auf Stundenbasis in Ludwigsburg
bestehendes Delphiprojekt
wurde von Delphi 3 auf delphi XE5 portiert und angepasst , seitdem läuft eine bisher eingbundene DLL nicht mehr


StdCall EXTERNAL xxxx.dll

gibt keine Daten mehr zurück
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Hallo suche Hilfe auf Stundenbasis in Ludwigsburg Delphi XE5

  Alt 11. Jan 2021, 14:44
Vermutlich ein Unicode-Problem
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

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

AW: Hallo suche Hilfe auf Stundenbasis in Ludwigsburg Delphi XE5

  Alt 11. Jan 2021, 14:48
Hallo,
mkinzler hat es schon angesprochen.

Wie sieht die Signatur (Parameter-Liste) der DLL-Methoden aus?

alt
procedure Dll_1(Name: String);
procedure Dll_2(Name: PChar);

neu (müsste geändert werden)
procedure Dll_1(Name: AnsiString);
procedure Dll_2(Name: PAnsiChar);
Heiko

Geändert von hoika (11. Jan 2021 um 15:47 Uhr)
  Mit Zitat antworten Zitat
Ceruso

Registriert seit: 11. Jan 2021
5 Beiträge
 
#4

AW: Hallo suche Hilfe auf Stundenbasis in Ludwigsburg Delphi XE5

  Alt 11. Jan 2021, 14:58
Hallo

dies wird übergeben
als erstes sollte der Name der Datei übergeben werden.
Die Dll prüft in einem Verzeichniss alle Dateien auf folgende Zeichen " IF POS('0 1 2 3 4 5 6 7 8 9',HStr)=1 THEN "
und falls vorhanden soll der Name übergeben werden.

F
Delphi-Quellcode:
UNCTION ExtFlrFirst (Name : STR255;
                         VAR Kopf : TFlrKopf;
                         VAR ExtFlrDat : TExtFlrDat) : INTEGER;
StdCall EXTERNAL 'Flr_Ein.dllINDEX 1;

FUNCTION ExtFlrNext (VAR Kopf : TFlrKopf;
                         VAR ExtFlrDat : TExtFlrDat) : INTEGER;
StdCall EXTERNAL 'Flr_Ein.dllINDEX 2;

FUNCTION ExtFlrKopf (Name : STR255;
                         Bez : STR255;
                         VAR Kopf : TFlrKopf) : INTEGER;
StdCall EXTERNAL 'Flr_Ein.dllINDEX 3;

FUNCTION ExtFlrLesen (Name : STR255;
                         Bez : STR255;
                         VAR Kopf : TFlrKopf;
                         VAR Anz : INTEGER;
                         VAR C,X : TEHTSpalte) : INTEGER;
StdCall EXTERNAL 'Flr_Ein.dllINDEX 4;

FUNCTION ExtFlrLoeschen (Name : STR255;
                         Bez : STR255;
                         TmpName : STR255) : INTEGER;
StdCall EXTERNAL 'Flr_Ein.dllINDEX 5;
DLL:
Delphi-Quellcode:
FUNCTION StringIstLeer (HStr : STRING) : BOOLEAN;
VAR I : INTEGER;
BEGIN
  I := LENGTH(HStr); WHILE (I>0) AND (HStr[I]=' ') DO DEC(I);
  StringIstLeer := I=0;
END;
{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - }
BEGIN
  HoleZeile := FALSE;
  IF Dat.Flag AND (Dat.BPos<Dat.Size) THEN
  BEGIN
    Zeile.Anfg := Dat.BPos;
    Zeile.Txt := '';
    Zeile.Typ := -1;
    CR := FALSE;
    LF := FALSE;
    I := 0;
    REPEAT
      IF Dat.BPos>=Dat.Pos THEN LeseBlock(Dat);
      IF Dat.Flag AND (Dat.BPos<Dat.Size) THEN
      BEGIN
        B := Dat.Blk[Dat.BPos-Dat.BAnf];
        INC(Dat.BPos); INC(I);
        IF B=$0A THEN LF := TRUE ELSE
        IF B=$0D THEN CR := TRUE ELSE
        IF Length(Zeile.Txt)<128 THEN
        BEGIN
           {Zeichen kleiner ' ' in Leerzeichen wandeln,
            fuehrende und mehrfache Leerzeichen gleich aussondern:}

           IF (B>ORD(' ')) THEN Zeile.Txt := Zeile.Txt+CHR(B) ELSE
           IF (LENGTH(Zeile.Txt)>0)
              AND (Zeile.Txt[Length(Zeile.Txt)]<>' ')
           THEN Zeile.Txt := Zeile.Txt+' ';
        END ELSE
        IF I>MaxZL THEN Dat.Flag := FALSE;
      END;
    UNTIL (NOT Dat.Flag) OR CR OR LF OR (Dat.BPos>=Dat.Size);
    {Zeilenabschluss mit CR, folgt noch ein zugehoeriges LF?}
    IF CR AND Dat.Flag AND (Dat.BPos<Dat.Size) THEN
    BEGIN
      IF Dat.BPos>=Dat.Pos THEN LeseBlock(Dat);
      IF Dat.Flag AND (Dat.Blk[Dat.BPos-Dat.BAnf]=$0A) THEN INC(Dat.BPos);
    END;
    {Zeile gelesen?}
    IF Dat.Flag THEN
    BEGIN
      HoleZeile := TRUE;
      {Enthaelt die Zeile Daten?}
      HStr := Zeile.Txt;
      {Leerzeile?}
      IF StringIstLeer(HStr) THEN Zeile.Typ := 0 ELSE
      {Spaltenbeschriftung?}
      IF [B]POS('0 1 2 3 4 5 6 7 8 9',HStr)=1[/B] THEN
      BEGIN
        IF StringIstLeer(COPY(HStr,20,255)) THEN Zeile.Typ := 1;

Geändert von mkinzler (12. Jan 2021 um 07:51 Uhr) Grund: Delphi-Tags eingefügt
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.752 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Hallo suche Hilfe auf Stundenbasis in Ludwigsburg Delphi XE5

  Alt 11. Jan 2021, 17:24
wie ist denn z.B. "B" definiert oder der Type: STR255 (Array[0..254] of char?)

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Ceruso

Registriert seit: 11. Jan 2021
5 Beiträge
 
#6

AW: Hallo suche Hilfe auf Stundenbasis in Ludwigsburg Delphi XE5

  Alt 12. Jan 2021, 05:44
Delphi-Quellcode:
LIBRARY Flr_Ein;

USES SysUtils,Classes;


TYPE
  TWert = RECORD
                       Gueltig : BOOLEAN;
                       Wert : DOUBLE;
                     END;
CONST
  MaxEHT = 7200;
  MaxEHTSP = 7200;
TYPE
  [B]STR255 [/B] = Ansistring;{STRING[255];}
  PEHTSpalte = ^TEHTSpalte;
  TEHTSpalte = ARRAY[0..MaxEHTSP] OF DOUBLE;
TYPE
  TFlrKopf = RECORD
                       Bez : STR255; {Bezeichnung}
                       EHT : STR255; {Dateiname EHT}
                       Bea : STR255; {Bearbeiter}
                       Bem : STR255; {Bemerkung}
                       Dat : STR255; {Datum/Uhrzeit}
                       DFl : BOOLEAN; {Flag Stoessel gelesen}
                       DRS : TWert; {Durchmesser Rollenstoessel}
                       Wkl : TWert; {Bezugswinkel}
                       Spg : TWert; {1=Gespiegelt}
                       Fkt : TWert; {Bewertungsfaktor}
                       Inch : BOOLEAN; {Flag fuer Masssystem}
                       Norm : BOOLEAN; {Flag, Daten normal auf T-Bahn}
                     END;
TYPE
  TExtFlrDat = ARRAY[0..255+4] OF BYTE;

.
.
.
.FUNCTION HoleZeile (VAR Dat : TDatei;
                    VAR Zeile : TZeile) : BOOLEAN;
CONST
  MaxZL = 500;
VAR
 [B] B [/B] : BYTE;
  CR,LF : BOOLEAN;
  I,J,E : INTEGER;
  HStr : STR255;

Geändert von mkinzler (12. Jan 2021 um 07:51 Uhr) Grund: Delphi-Tag eingefügt
  Mit Zitat antworten Zitat
hoika

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

AW: Hallo suche Hilfe auf Stundenbasis in Ludwigsburg Delphi XE5

  Alt 12. Jan 2021, 06:42
Hallo ,
wir brauchen die Definition aller Datentypen,
ST255, TFlrxxxxx

Dort muss alles von String auf AnsiString, von Char auf AnsiChar geändert werden.
Heiko

Geändert von hoika (12. Jan 2021 um 06:46 Uhr)
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Hallo suche Hilfe auf Stundenbasis in Ludwigsburg Delphi XE5

  Alt 12. Jan 2021, 07:52
Abgesehen vom offensichtlichen problem mit den Shortstrings, die ja zum Unicode-Problem führen sind da noch mehr Fallstricke vergraben, die man im hier geposteten Code sieht. Da wäre vielleicht mal ein Refactoring angesagt - das ist auch kein Hexenwerk und sicher rasch erledigt.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.447 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Hallo suche Hilfe auf Stundenbasis in Ludwigsburg Delphi XE5

  Alt 12. Jan 2021, 12:29
Könnte man diese Diskussion vielleicht in eine andere Kategorie verschieben? Ursprünglich ging es ja um ein Job-Angebot.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
42.982 Beiträge
 
Delphi 12 Athens
 
#10

AW: Hallo suche Hilfe auf Stundenbasis in Ludwigsburg Delphi XE5

  Alt 12. Jan 2021, 15:01
UnicodeProblem:
Ja, erstmal ist "String" (nicht der Typ "String[123]") seit Delphi 2009 ein Alias für einen UnicodeString und vorher war er es für AnsiString.
Aber der Typ "String[123]" ist und war immer ANSI.



Was bedeutet Ansistring;{STRING[255];} ?

Es was mal String[255] und ist jetzt AnsiString?

String/AnsiString/UnicodeString sind "LongStrings", was "intern" ein Zeiger auf einen String ist,
also im Record oder den Parametern mit diesem Typen ist immer nur ein "Pointer" drin.

Beim Typen String[123] ist es aber ein "ShortString", was "intern" ein Record/StatischesArray ist, also da wo dieser Typ drin ist, dort sind die Chars direkt drin. (und ich wette, es war beim Record TFlrKopf und den Parametern, für die DLL-Schnittstelle, auch absichtlich so)




PS: statt if StringIstLeer(HStr) then kann man auch if Trim(HStr) = 'then verwenden
und statt if Pos(...) = 1 then würde ich heutzutage eher Delphi-Referenz durchsuchenStartsStr empfehlen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (12. Jan 2021 um 15:08 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:33 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