AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Probleme mit Datentypen bei einer DLL
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Datentypen bei einer DLL

Ein Thema von mcinternet · begonnen am 21. Jun 2012 · letzter Beitrag vom 2. Jul 2012
Antwort Antwort
mcinternet

Registriert seit: 22. Apr 2010
Ort: Odenwald
193 Beiträge
 
Delphi 10.3 Rio
 
#1

Probleme mit Datentypen bei einer DLL

  Alt 21. Jun 2012, 11:24
Moin,

ich habe eine DLL die mir laut Buch eine Adresse auf einen Null-Termierten String zurückgibt
( returns the address of a null-terminated character string ). Habe da bereits alle möglichen Datentypen ausprobiert und komme auf keinen grünen Zweig. Vielleicht hat hier jemand einen Tip?

Die dll ist aus dem Jahre 2004 und wird seitdem nicht mehr verändert -

ich arbeite hier mit Delphi XE unter Windows 7.

der Aufruf ist:

function xyzErrMsg ( errorCode : Word
) : String; stdcall; external xyzdll name 'ErrMsg';

Der Datentyp String passt hier leider nicht

Gruss

McInternet
Jörg

Geändert von mcinternet (21. Jun 2012 um 11:31 Uhr) Grund: Code eingefügt
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Probleme mit Datentypen bei einer DLL

  Alt 21. Jun 2012, 11:39
Hast Du es mal mit PAnsiChar versucht ?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
mcinternet

Registriert seit: 22. Apr 2010
Ort: Odenwald
193 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Probleme mit Datentypen bei einer DLL

  Alt 21. Jun 2012, 12:04
Hast Du es mal mit PAnsiChar versucht ?

Gruß
K-H
aufruf dann:

var Meldung : PAnsichar;

Meldung := yxzErrMsg(errornummer);

Gruss
McInternet
Jörg
  Mit Zitat antworten Zitat
mcinternet

Registriert seit: 22. Apr 2010
Ort: Odenwald
193 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Probleme mit Datentypen bei einer DLL

  Alt 21. Jun 2012, 12:35
ne - kommt nur Blödsinn


Gruss

McInternet
Jörg
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Probleme mit Datentypen bei einer DLL

  Alt 21. Jun 2012, 12:39
Nein, ich glaube du hast ihn falsch verstanden, du musst sozusagen, wie du die Funktion importierst ändern.
Delphi-Quellcode:
function xyzErrMsg ( errorCode : Word
) : String; stdcall; external xyzdll name 'ErrMsg';
zu:
Delphi-Quellcode:
function xyzErrMsg ( errorCode : Word
) : PAnsiChar; stdcall; external xyzdll name 'ErrMsg'; //Man verwendet ungern Strings, also den DatenTyp String von Delphi. PAnsiChar ist nur eine Adresse auf den Anfang eines Textes im Speicher.
Und um im Speicher zu wissen, wann er aufhört, setzt man ein 0 Byte (#0 in Char) am Ende.
D.h. wenn du auf den Datentyp PAnsiChar zugreifst, wird alles gelesen bis zum 0 Byte.
Gruß NickelM
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
mcinternet

Registriert seit: 22. Apr 2010
Ort: Odenwald
193 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Probleme mit Datentypen bei einer DLL

  Alt 21. Jun 2012, 12:43
Nein, ich glaube du hast ihn falsch verstanden, du musst sozusagen, wie du die Funktion importierst ändern.
Delphi-Quellcode:
function xyzErrMsg ( errorCode : Word
) : String; stdcall; external xyzdll name 'ErrMsg';
zu:
Delphi-Quellcode:
function xyzErrMsg ( errorCode : Word
) : PAnsiChar; stdcall; external xyzdll name 'ErrMsg'; //Man verwendet ungern Strings, also den DatenTyp String von Delphi. PAnsiChar ist nur eine Adresse auf den Anfang eines Textes im Speicher.
Und um im Speicher zu wissen, wann er aufhört, setzt man ein 0 Byte (#0 in Char) am Ende.
D.h. wenn du auf den Datentyp PAnsiChar zugreifst, wird alles gelesen bis zum 0 Byte.
Gruß NickelM
das hab ich schon so nach PAnsiChar geändert.

Ich rufe dann diese Funktion so auf:

var Meldung : PAnsiChar;
Fehlernummer : Word;
Begin
Meldung := xyzErrMsg(Fehlernummer);
...
...
end;

nur leider steht da nur Blödsinn drin ( wenn ich schon mit dem Debugger reinschaue)
=> $495ABA{"} ....
und drin stehen muß z.B. => success etc.

Achso: Das Gleiche compiliert unter Delphi 2007 - einwandfrei!

Gruß
McInternet
Jörg

Geändert von mcinternet (21. Jun 2012 um 12:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.545 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Probleme mit Datentypen bei einer DLL

  Alt 21. Jun 2012, 12:50
Der Funktionskopf ist schon ungewöhnlich für eine Funktion in einer DLL. Normalerweise übergibt man einen Speicherbereich, den man selbst reserviert hat, welcher dann durch die Funktion befüllt wird. Ist die DLL in Delphi geschrieben? Falls in C/C++, hast Du da Header-Dateien dafür? Wie sähe dann da der Originalaufruf aus?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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 06:37 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