Delphi-PRAXiS
Seite 1 von 2  1 2      

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 09: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 10: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 10: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 11: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 12: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 13: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 13: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 13: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 13: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 13: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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 Uhr.
Seite 1 von 2  1 2      

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