AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Konvertierungsproblem C++/VB nach Delphi. Buffer als var Parameter in/aus DLL
Thema durchsuchen
Ansicht
Themen-Optionen

Konvertierungsproblem C++/VB nach Delphi. Buffer als var Parameter in/aus DLL

Ein Thema von Tonic1024 · begonnen am 24. Sep 2010 · letzter Beitrag vom 28. Sep 2010
Antwort Antwort
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Konvertierungsproblem C++/VB nach Delphi. Buffer als var Parameter in/aus DLL

  Alt 24. Sep 2010, 10:34
Hallo...

Ich beiss mir grad die Zähne an ner VB-Übersetzung aus.

Code:
Private Declare Function MCardGetAttrib Lib "MCSCM.DLL" (ByVal hMCardContext As Long, ByVal dwAttrId As Long, ByVal pbAttr As String, ByRef pcbAttrLen As Long) As Long

[..]

  Dim S As String
  Dim lSize As Long
  Dim lReturn As Long
   
  S = String(100, 0)
  lSize = 4
  lReturn = MCardGetAttrib(hMCardContext, dwAttrId, S, lSize)
Delphi-Quellcode:
function MCardGetAttrib(hMCardContext: THandle; dwAttrId: Integer; pbAttr: PAnsiChar; var pcbAttrLen: Integer): Integer; stdcall; external 'MCSCM.DLL';

[..]

var Return: Integer;
    s: AnsiString;
    size: Integer;

[..]

  s := DupeString(Chr(0), 100);
  size:=4;
  Return:=MCardGetAttrib(hMCardContext, MCARD_ATTR_TYPE, PAnsiChar(s), size);
Die Fehlermeldung für MCardGetAttrib aus der DLL lautet "Invalid Parameter".

Die Verwendung von PAnsiChar hat an anderer Stelle schon mal geklappt. Aber hier vermute ich, dass es Probleme mit den Nullchars gibt. Wie geht man hier vor?

Hoffe jemand hat ne zündende Idee.

Gruß,

Toni
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?

Geändert von Tonic1024 (24. Sep 2010 um 14:29 Uhr) Grund: Topic hat sich beim Lösungsansatz irgendwie verschoben.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.222 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Konvertierungsproblem, VB - String an DLL übergeben

  Alt 24. Sep 2010, 12:09
PAnsiChar? Kann es sein das PWideChar's erwartet werden?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
hoika

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

AW: Konvertierungsproblem, VB - String an DLL übergeben

  Alt 24. Sep 2010, 12:21
Hallo,

schau mal hier.
http://entwickler-forum.de/archive/i...p/t-24695.html

Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#4

AW: Konvertierungsproblem, VB - String an DLL übergeben

  Alt 24. Sep 2010, 12:55
Widestring führte mich nicht weiter...

Ich hab die Zeit aber genutzt und noch ein c++ Beispeil für das selbe Problem gefunden. Dort schaut es so aus:

Code:
typedef LONG (WINAPI *pfnMCardGetAttrib) (IN MCARDHANDLE hMCard, IN DWORD dwAttrId, OUT LPBYTE pbAttr, IN OUT LPDWORD pcbAttrLen);

[..]      
BYTE   abyAttr [100];
DWORD   dwLen;

MCardGetAttrib (CardHandle, MCARD_ATTR_TYPE, abyAttr, &dwLen);
Als erstes ist mir aufgefallen, dass im VB Code ein ByVal verschütt gegangen ist. Das lässt mich ja jetzt ein bissel an der ganzen Implementation zweifeln. Aber von C++ hab ich noch weniger Ahnung als von VB. Da wird fleißig gepointert.
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Konvertierungsproblem, VB - String an DLL übergeben

  Alt 24. Sep 2010, 13:04
hilft Dir das weiter ?

TSCardSetAttrib = function (hCard: LongInt; dwAttrId: LongInt; var pbAttr: PByte; cbAttrLen: LongInt): LongInt; stdcall;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#6

AW: Konvertierungsproblem, VB - String an DLL übergeben

  Alt 24. Sep 2010, 13:19
Ja, das kommt dem schon recht nahe was ich da intuitiv, also ohne genau zu wissen was ich tue, draus gemacht hab. Aber egal wie ich den Aufruf mache, ich erhalte immer "Invalid Parameter"

Delphi-Quellcode:
function MCardGetAttrib(hMCardContext: THandle; dwAttrId: Integer; var pbAttr: PByte; var pcbAttrLen: PDWord): Integer; stdcall; external 'MCSCM.DLL';

[..]
  byArray: array [0..99] of Byte;
[..]
  for i := 0 to 99 do
    byArray[i]:=$00;

  size:=4;
  Return:=MCardGetAttrib(hMCardContext, MCARD_ATTR_TYPE, PByte(byArray), PDWord(size));

[Edit]Hab auch die offizielle Doku ergoogelt -Klick- (Seite 19) aber meine C++ Kenntnisse reichen nur bis zu dem Punkt an dem es auch schon vorher hakte. [/Edit]

Toni
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?

Geändert von Tonic1024 (24. Sep 2010 um 14:01 Uhr)
  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 20:48 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