AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

PChar und string

Ein Thema von tomaten · begonnen am 21. Sep 2005 · letzter Beitrag vom 27. Sep 2005
Antwort Antwort
Seite 2 von 3     12 3   
jbg

Registriert seit: 12. Jun 2002
3.479 Beiträge
 
Delphi 10.1 Berlin Professional
 
#11

Re: PChar und string

  Alt 21. Sep 2005, 16:16
Zitat von tomaten:
ICH MUSS EIN WIN32.DLL EINBINDEN FÜR DIE ES KEINE ALTERNATIVE GIBT
Na und. Dafür brauchst du keinen PChar unter .NET. (wovon ich ja die ganze Zeit rede).
Zitat:
Es gibt für alles einen Grund, akzeptier es einfach!
Sicherlich, nur kann es mehrere Lösungswege geben.

Schauen wir uns mal die Win32API Funktion SetCurrentDirectory an:
Unter Win32:
function SetCurrentDirectoryA(lpPathName: PAnsiChar): BOOL; stdcall; external kernel32 name 'SetCurrentDirectoryA';
Unter .NET:
Delphi-Quellcode:
[SuppressUnmanagedCodeSecurity, DllImport(kernel32, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'SetCurrentDirectoryA')]
function SetCurrentDirectoryA(lpPathName: string): BOOL; external;
Ups. Wo ist denn der PChar geblieben - Ach den braucht man da gar nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von tomaten
tomaten

Registriert seit: 19. Jun 2005
118 Beiträge
 
Delphi 2005 Architect
 
#12

Re: PChar und string

  Alt 21. Sep 2005, 16:59
Das ist echt phänomenal. Man muss Leute erst reizen, bevor man mal klare Lösungen bekommt. Sorry, hatte .NET heute nicht im Frühstück, aber trotzdem Danke. Leider funktioniert diese verdamm... DLL immer noch nicht. Es ist kein Geheimniss, es handelt sich dabei um die sevDTA32.dll (sevDTA32). Falls jemand eine Alternative kennt, bin ich auch dankbar! Btw. mit Kooperation des Hersteller kann man als "nicht VBler" nicht rechnen! "Unter VB.NET geht es ..."

Dabei geht es um folgendes:
Delphi-Quellcode:
SetLength(sPz, 3);
SetLength(BankName, 28);
KtoResult := sevDTA_BLZGetInfo(BankNumber, BankName, sPz);
Was unter Win32 immer funktionierte, mir nun aber kein Ergebniss und schon gar keinen Banknamen zurück gibt.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.479 Beiträge
 
Delphi 10.1 Berlin Professional
 
#13

Re: PChar und string

  Alt 21. Sep 2005, 18:04
Zitat von tomaten:
Das ist echt phänomenal. Man muss Leute erst reizen, bevor man mal klare Lösungen bekommt.
Muss man nicht. Ich konnte ja nicht ahnen, dass du noch nie in die Borland.Rtl.Windows.pas geschaut hast, wie es da gelöst wurde.

Zitat:
"Unter VB.NET geht es ..."
Echt? Also mir liefert der vbc.exe immer Unbekannnte Symbole Trim, Space usw. Vielleicht muss man das aber auch mit VisualStudio "for VB.NET" starten.


Zitat:
Was unter Win32 immer funktionierte, mir nun aber kein Ergebniss und schon gar keinen Banknamen zurück gibt.
Ich habe das "Import" Modul jetzt mal duch den Compiler gejagt, und siehe da, es wird aus ByVal String ein ByRef String. Das nenne ich mal Phänomenal. Wenn ich ein VBler wäre würde ich mich vera** vorkommen.

Probiere mal folgendes:
Delphi-Quellcode:
uses
  System.Runtime.InteropServices;

[DllImport('sevDTA32.DLL', CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
function sevDTA_BLZExists([MarshalAs(UnmanagedType.VBByRefStr)] var sBlz: string): Integer;
[DllImport('sevDTA32.DLL', CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
function sevDTA_BLZFileDate([MarshalAs(UnmanagedType.VBByRefStr)] var sDatum: string): Integer;
[DllImport('sevDTA32.DLL', CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
function sevDTA_BLZGetInfo([MarshalAs(UnmanagedType.VBByRefStr)] var sBlz: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sName: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sPz: string): Integer;
[DllImport('sevDTA32.DLL', CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
procedure sevDTA_BLZSetPath([MarshalAs(UnmanagedType.VBByRefStr)] var sPath: string);
[DllImport('sevDTA32.DLL', CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
function sevDTA_CheckCreditCard([MarshalAs(UnmanagedType.VBByRefStr)] var sCardType: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sCardNr: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sMsgText: string; nLenReturn: Integer): Integer;
[DllImport('sevDTA32.DLL', CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
function sevDTA_CheckKontoNr([MarshalAs(UnmanagedType.VBByRefStr)] var sBlz: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sKontoNr: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sPz: string): Integer;
[DllImport('sevDTA32.DLL', CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
procedure sevDTA_Close(lHandle: Integer);
[DllImport('sevDTA32.DLL', CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
procedure sevDTA_CloseFile(fHandle: Integer);
[DllImport('sevDTA32.DLL', CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
function sevDTA_CreateFile([MarshalAs(UnmanagedType.VBByRefStr)] var sFilename: string; iOvrWriteExists: Integer): Integer;
[DllImport('sevDTA32.DLL', CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
function sevDTA_FileAddRec(fHandle: Integer; [MarshalAs(UnmanagedType.VBByRefStr)] var sBlz1: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sKtoNr1: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sName1: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sIntKdNr: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sBlz2: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sKtoNr2: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sName2: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sVerwendung: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sBetrag: string): Integer;
[DllImport('sevDTA32.DLL', CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
function sevDTA_FileAddRecEx(fHandle: Integer; [MarshalAs(UnmanagedType.VBByRefStr)] var sBlz1: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sKtoNr1: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sName1: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sIntKdNr: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sBlz2: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sKtoNr2: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sName2: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sVerwendung: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sBetrag: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sTextschl: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sTextschlErw: string): Integer;
[DllImport('sevDTA32.DLL', CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
function sevDTA_FileEnd(fHandle: Integer): Integer;
[DllImport('sevDTA32.DLL', CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
function sevDTA_FileInit(fHandle: Integer; [MarshalAs(UnmanagedType.VBByRefStr)] var sKz: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sBlz: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sKtoNr: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sName: string; iEuro: Integer): Integer;
[DllImport('sevDTA32.DLL', CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
function sevDTA_Init([MarshalAs(UnmanagedType.VBByRefStr)] var sInit: string): Integer;
[DllImport('sevDTA32.DLL', CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
function sevDTA_Kontrollsummen([MarshalAs(UnmanagedType.VBByRefStr)] var SumDaten: string; [MarshalAs(UnmanagedType.VBByRefStr)] var SumBLZ: string; [MarshalAs(UnmanagedType.VBByRefStr)] var SumKtoNr: string; [MarshalAs(UnmanagedType.VBByRefStr)] var SumBetrag: string): Integer;
[DllImport('sevDTA32.DLL', CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
procedure sevDTA_Print(hDC: Integer; [MarshalAs(UnmanagedType.VBByRefStr)] var prnName: string; [MarshalAs(UnmanagedType.VBByRefStr)] var FontName: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sName: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sBlz: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sKtoNr: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sDatum: string);
[DllImport('sevDTA32.DLL', CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
procedure sevDTA_PrintEx(hDC: Integer; [MarshalAs(UnmanagedType.VBByRefStr)] var prnName: string; [MarshalAs(UnmanagedType.VBByRefStr)] var FontName: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sName: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sBlz: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sKtoNr: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sDatum: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sVolNr: string; [MarshalAs(UnmanagedType.VBByRefStr)] var sLogNr: string);
Ach ja, der Quellcode "stinkt" nach VB-Programmierung. Ein externes Handle wird in .NET nicht einfach mit einem Integer abgegolten. Dafür nutzt man normalerweise einen IntPtr. Aber da es für mich auf die Schnelle nicht ersichtlich ist, welcher der Integer nun ein Boolean, ein Integer oder ein Handle ist, habe ich es einfach mal bei Integer belassen.
  Mit Zitat antworten Zitat
Benutzerbild von tomaten
tomaten

Registriert seit: 19. Jun 2005
118 Beiträge
 
Delphi 2005 Architect
 
#14

Re: PChar und string

  Alt 21. Sep 2005, 20:19
Na dann zieh ich mir o.a. morgen mal rein, muss jetzt noch dringend was anderes fertig machen. Aber Du siehst, dass es schon ziemlicher Horror ist, wenn man noch nicht so in .NET steckt, dann noch der VB-Horror dazu kommt ...
  Mit Zitat antworten Zitat
Benutzerbild von tomaten
tomaten

Registriert seit: 19. Jun 2005
118 Beiträge
 
Delphi 2005 Architect
 
#15

Re: PChar und string

  Alt 21. Sep 2005, 22:51
Es geht!
http://www.mainzelahr.de/smile/liebe/147.gif jbg
http://www.mainzelahr.de/smile/party/04.gif
  Mit Zitat antworten Zitat
Benutzerbild von Speedmaster
Speedmaster

Registriert seit: 4. Mär 2005
Ort: Karlsruhe
535 Beiträge
 
Delphi 2005 Personal
 
#16

Re: PChar und string

  Alt 27. Sep 2005, 17:00
Verzeiht mir wenn ich den Thread nochmal hochhole, aber wie sieht den die Übergabe eines Stings als PChar an eine DLL in C# aus? Komme irgendwie nicht auf einen Grünen Zweig!
Felix K.
Zitat:
Siehst du diesen Park da unten?
Jeden Tag lernen sich leute kennen und verlassen einander, und du hast dein ganzes Leben Zeit darin zu gehen!
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.479 Beiträge
 
Delphi 10.1 Berlin Professional
 
#17

Re: PChar und string

  Alt 27. Sep 2005, 18:54
Schon mal was von google gehört?

Code:
[DllImport("MyLib.dll", EntryPoint="MyFunc")]
public static extern int MyFunc(string s);
  Mit Zitat antworten Zitat
TheXception
(Gast)

n/a Beiträge
 
#18

Re: PChar und string

  Alt 27. Sep 2005, 18:56
DLLFunction(PChar('test')); versuchs mal so.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.479 Beiträge
 
Delphi 10.1 Berlin Professional
 
#19

Re: PChar und string

  Alt 27. Sep 2005, 18:58
Er schreibt von C# => .NET. Und da gibt es keinen PChar.
  Mit Zitat antworten Zitat
Benutzerbild von Speedmaster
Speedmaster

Registriert seit: 4. Mär 2005
Ort: Karlsruhe
535 Beiträge
 
Delphi 2005 Personal
 
#20

Re: PChar und string

  Alt 27. Sep 2005, 18:58
Zitat von jbg:
Schon mal was von google gehört?

Code:
[DllImport("MyLib.dll", EntryPoint="MyFunc")]
public static extern int MyFunc(string s);
... Leider liefert er mir immer Null zurück?
Felix K.
Zitat:
Siehst du diesen Park da unten?
Jeden Tag lernen sich leute kennen und verlassen einander, und du hast dein ganzes Leben Zeit darin zu gehen!
  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 12:13 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