Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi string in unicode konvertieren und an Api-Funktion übergeben (https://www.delphipraxis.net/9701-string-unicode-konvertieren-und-api-funktion-uebergeben.html)

steppo 2. Okt 2003 10:54


string in unicode konvertieren und an Api-Funktion übergeben
 
Hi christian

die konvertierung klappt immer noch nicht.
Ich muß den string in unicode konvertieren und dann als PChar an eine Api-fuktion übergeben.
Von der Api-funktion bekomme ich die Fehlermeldung
Fehlernummer/Fehlermeldung/Name
"1780 / A null reference pointer was passed to the stub./ RPC_X_NULL_REF_POINTER

Das heißt, daß nichts übergeben wird,oder?

kannst du mir helfen?
Hier der Quellcode:


Delphi-Quellcode:
const
  Parameter: array[0..4] of string = ('Peter-Pan', 'Hans-Klaus',
    'OU=Heinz-DE,DC=Petra,DC=Karl,DC=net', 'Anton.Karl-Verena',
    'Claudia');
var
  UebergabeParam: array[0..4] of PWideChar;
  HilfsVariable: array[0..4] of PWideChar;
  aServer, aDomain, aSub, aAccount, aPassword: PWideChar;
begin
for i := 0 to 4 do
  begin
    HilfsVariable[i] := AllocMem(length(Parameter[i]) * 2);
    try
      UebergabeParam[i] := StringToWideChar(parameter[i], HilfsVariable[i],
        length(Parameter[i]) * 2);
    finally
      FreeMem(HilfsVariable[i], length(Parameter[i]) * 2);
    end;
  end;
end;
[edit=Christian Seehase]Delhpi-Tags ergänzt, bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

Robert Marquardt 2. Okt 2003 11:12

Re: string in unicode konvertieren und an Api-Funktion überg
 
Delphi-Quellcode:
var
  PW: PWideChar;
  W: WideString;
begin
  // Delphi macht die Umwandlung automatisch
  W := 'ein AnsiString';
  // nun den PWideChar dazu
  PW := PWideChar(W);
  APIFunktion(PW);

Christian Seehase 2. Okt 2003 11:13

Re: string in unicode konvertieren und an Api-Funktion überg
 
Moin Steppo,

um welche API Funktion geht's denn?
Wenn die wirklich einen PChar braucht, und Du einen PWideChar übergibst wäre es verständlich, dass das schief geht.

steppo 2. Okt 2003 12:32

Re: string in unicode konvertieren und an Api-Funktion überg
 
Ich brauche die Api-funktion "NetJoinDomain".

Delphi-Quellcode:
function NetJoinDomain(lpServer, lpDomain, lpAccountOU, lpAccount, lpPassword:
  PChar; fJoinOptions: Integer): Integer; stdcall; external
'Netapi32.dll' name 'NetJoinDomain';
und noch eine Frage!
wie definieren ich die FJoinOptions.
gebe im Moment nur den Integerwert der zu benutzenden Optionen an:

fJoinOptions
[in] Specifies a value that contains a set of bit flags defining the join options. This parameter can be one or more of the following values. Value Meaning
NETSETUP_JOIN_DOMAIN Joins the computer to a domain. If this value is not specified, joins the computer to a workgroup.
NETSETUP_ACCT_CREATE Creates the account on the domain.
NETSETUP_WIN9X_UPGRADE The join operation is occurring as part of an upgrade of Windows Me/98/95.
NETSETUP_DOMAIN_JOIN_IF_JOINED Allows a join to a new domain even if the computer is already joined to a domain.
NETSETUP_JOIN_UNSECURE Performs an unsecured join.
NETSETUP_MACHINE_PWD_PASSED Indicates that the lpPassword parameter specifies a local machine account password rather than a user password. This flag is valid only for unsecured joins, which you must indicate by also setting the NETSETUP_JOIN_UNSECURE flag.
If you set this flag, then after the join operation succeeds, the machine password will be set to the value of lpPassword, if that value is a valid machine password.

das ganze wird dann so
Delphi-Quellcode:
Api_Meldung := NetJoinDomain(PChar(UebergabeParam[0]),
    PChar(UebergabeParam[1]), PChar(UebergabeParam[2]),
    PChar(UebergabeParam[3]), PChar(UebergabeParam[4]), 0 + 1);
übergeben.

Robert Marquardt 2. Okt 2003 13:08

Re: string in unicode konvertieren und an Api-Funktion überg
 
Unter http://www.delphi-jedi.org/Jedi:APILIBRARY ist die grosse Win32 Konversion von Marcel van Brakel erhaeltlich.

steppo 2. Okt 2003 14:02

Re: string in unicode konvertieren und an Api-Funktion überg
 
Ich wandele PWideChar in PChar um.

PChar(Parameter[i]);

Das ergebnis ist ein leerer Speicherbereich.

Robert Marquardt 2. Okt 2003 14:10

Re: string in unicode konvertieren und an Api-Funktion überg
 
Loes mal bitte die Widersprueche auf.
Zuerst willt du in einen PWideChar wandeln.
Danach willst du NetJoinDomain aufrifen das nur mit PChar arbeitet.
Nun willst du von einem PWideChar wandeln.

Christian Seehase 2. Okt 2003 14:13

Re: string in unicode konvertieren und an Api-Funktion überg
 
Moin Steppo,

wo hast Du denn die Deklaration her?

Bei mir sieht die für den statischen Import so aus:

Delphi-Quellcode:
// From LMJoin.h
function NetJoinDomain = function(
    const lpServer    : PWChar;
    const lpDomain    : PWChar;
    const lpAccountOU : PWChar;
    const lpAccount   : PWChar;
    const lpPassword  : PWChar;
    const fJoinOptions : DWord
    ) : NET_API_STATUS; stdcall; external 'netapi32.dll';
wobei NET_API_STATUS als DWORD deklariert ist.

Die Funktion erwartet PWideChar und nicht PChar, also dürfen die gar nicht umgewandelt werden, wenn Du PWideChar hast.

[EDIT]
Es gibt auch keine ANSI Version von dieser Funktion. Das dürfte auf so ziemlich alle LM Funktionen für NTff zutreffen.
[/EDIT]

steppo 2. Okt 2003 14:30

Re: string in unicode konvertieren und an Api-Funktion überg
 
Habe die Deklaration direkt aus der online-msdn.
So wie ich das sehe, habe ich die Funktion nicht richtig aus VB nach Delphi übertragen.
entschuldigung.

Christian Seehase 2. Okt 2003 14:37

Re: string in unicode konvertieren und an Api-Funktion überg
 
Moin Steppo,

Zitat:

Zitat von Steppo
So wie ich das sehe, habe ich die Funktion nicht richtig aus VB nach Delphi übertragen.
entschuldigung.

Ist ja nicht schlimm.

Am besten wäre es in so einem Falle nicht nach bestehenden VB Übersetzungen zu suchen, sondern direkt die C-Deklarationen für die Übersetzung zu verwenden.
Ich kenn' mich jetzt mit VB nicht so gut aus, aber meines Wissens muss man da für so manche Sache ein paar mehr Verrenkungen machen um einige API Funktionen nutzen zu können.
Eine Übersetzung C > PAS dürfte einfacher sein, als C > BAS > PAS ;-)

Falls Du kannst (sind so ca. 360MB Vollinstallation) kannst Du Dir sonst auch mal das PSDK herunterladen, ggf. auch nur teilweise.
Dann hast Du auch gleich die C Header dabei und kannst Dir auch eventuell in Delphi noch nicht enthaltene Konstanten heraussuchen.

steppo 2. Okt 2003 15:15

Re: string in unicode konvertieren und an Api-Funktion überg
 
wo finde ich die psdk als download?

Christian Seehase 2. Okt 2003 15:28

Re: string in unicode konvertieren und an Api-Funktion überg
 
Moin Steppo,

damit sollte es gehen:

http://www.microsoft.com/msdownload/...pdate/home.htm

Du musst Dir halt noch aus dem Menü heraussuchen, was Du haben willst.

Robert Marquardt 2. Okt 2003 15:32

Re: string in unicode konvertieren und an Api-Funktion überg
 
Win32-Sachen muss man nicht nach Delphi uebersetzen. Das hat doch Marcel van Brakel schon gemacht.

Christian Seehase 2. Okt 2003 15:38

Re: string in unicode konvertieren und an Api-Funktion überg
 
Moin Robert,

ja schon, allerdings im Borland Stil, also mit var Parametern.
Ich für meinen Teil bevorzuge da die C-typische Deklaration, da man dann, soweit es die Funktion ermöglicht z.B. auch mal nil übergeben kann, aber auch, weil sich dann C-Samples leichter umsetzen lassen.

Das ist natürlich alles Geschackssache, aber vielleicht stehe ich mit dieser Ansicht ja nicht ganz alleine da ;-)

Zudem kann's nie schaden mal die Originaldeklaration zur Hand zu haben. Jeder kann sich schliesslich mal vertun.

steppo 2. Okt 2003 15:50

Re: string in unicode konvertieren und an Api-Funktion überg
 
Mein quellcode sieht nun so aus.

Delphi-Quellcode:
const
  Parameter: array[0..4] of PWChar = ('Peter-Pan', 'Hans-Klaus',
    'OU=Heinz-DE,DC=Petra,DC=Karl,DC=net', 'Anton.Karl-Verena',
    'Claudia');
var
  UebergabeParam: array[0..4] of PWChar;
  HilfsVariable: array[0..4] of PWChar;
  aServer, aDomain, aSub, aAccount, aPassword: PWChar;

Delphi-Quellcode:
function NetJoinDomain(const lpServer: PWChar; const lpDomain:
  PWChar; const lpAccountOU: PWChar; const lpAccount: PWChar; const lpPassword:
  PWChar; const fJoinOptions: DWord): NET_API_STATUS; stdcall; external
'netapi32.dll';
Delphi-Quellcode:
function bla
 Api_Meldung := NetJoinDomain(UebergabeParam[0], UebergabeParam[1],
    UebergabeParam[2], UebergabeParam[3], UebergabeParam[4], 0 + 1);
Api_Meldung ist vom Typ integer.

Result der Api-Funktion ist immer noch:
Fehlernummer/Fehlermeldung/Name
"1780 / A null reference pointer was passed to the stub./ RPC_X_NULL_REF_POINTER

Robert Marquardt 2. Okt 2003 16:03

Re: string in unicode konvertieren und an Api-Funktion überg
 
Lass doch mal den ganzen Schmonz mit Uebergabeparameter usw weg und nimm direkt
NetJoinDomain(Parameter[0], Parameter[1}, Parameter[2], Parameter[3], Parameter[4], 0+1);

Das wird zwar wahrscheinlich immer noch den gleichen Fehler ergeben, aber ich nehme
an das deine Parameter-Inhalte nicht stimmen.
Arbeite dich doch erst mal langsam mit nil fuer moeglichst viele Parameter hoch.
Ich glaube z. B. nicht das 'Peter-Pan' ein legaler NETBIOS Name ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 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 by Thomas Breitkreuz