![]() |
Problem mit Funktion WNetAddConnection2
Hallo DPler,
ich habe folgenden Code:
Delphi-Quellcode:
Wenn ich ihn ausfuehre hat Result 67 und somit OK! Ich bekomme aber die ShowMessage angezeigt und sobald ich sie mit OK wegklicke bekomme ihc mein richtiges Ergebnis.
function TfoMain.RegLoginAndConnectRegistry(lpMachineName: String; hKey: HKEY;
var phkResult: HKEY; User, Password: String): LongInt; var lpNetResource: TNetResource; begin with lpNetResource do begin dwType := RESOURCETYPE_ANY; lpLocalName := nil; lpProvider := nil; lpRemoteName:= PChar(lpMachineName + '\IPC$'); end; Result := WNetAddConnection2(lpNetResource, PChar(Password), PChar(User), 0); if ( Result = NO_ERROR ) then begin Result := RegConnectRegistry(PChar(lpMachineName), hKey, phkResult); end else begin ShowMessage(SysErrorMessage(GetLastError)); end; end; Weis jemand warum? |
Re: Problem mit Funktion WNetAddConnection2
Ich bin der Meinung, daß WNetAddConnection2 0 für "OK" und 67 für "The network name cannot be found" zurück liefert.
|
Re: Problem mit Funktion WNetAddConnection2
Funktioniert der Code denn mit einer administrativen Freigabe (z.B. C$)? Ich bin nämlich der Meinung das man sich auf die IPC$-Freigabe überhaupt nicht verbinden kann.
|
Re: Problem mit Funktion WNetAddConnection2
Wie schon gesagt,
ich bekomme die ShowMessage, klicke sie weg und bin verbunden mit dem anderen PC! |
Re: Problem mit Funktion WNetAddConnection2
stell mal die Optimierung aus ;-) die hat mir beim der WinAPI schon öfters Streiche gespielt....
EInfach {$O-} über die Funktion und {$O+} drunter. Was steht denn in der MessageBox? kannst es ja mal mit 0 probieren bzw. in die Messagebox zusätzlich den rückgabewert noch reintun. |
Re: Problem mit Funktion WNetAddConnection2
Hi Luke,
danke. Werd ich sofort probieren. Der Rueckgabewert ist 67 und als Fehler kommt dann ERROR_NO_NETWORK. Dann aber wie gesagt mit OK die ShowMessage weg und ich bin verbunden. Aber das kann ich ja so nicht wirklich lassen denn es ist ja dann nicht wirklich ein Error! |
Re: Problem mit Funktion WNetAddConnection2
Moin Mackhack,
ich hoffe doch mal, dass lpMachineName auch die führenden \\ beinhaltet. |
Re: Problem mit Funktion WNetAddConnection2
Inzwischen ja, seit ca. 1h!
Aber immer noch das gleiche Problem! |
Re: Problem mit Funktion WNetAddConnection2
Hi,
wie koennte ich denn pruefen ob RegConnectRegistry Nil ist? Denn laut MSDN wird die locale Registry ausgelesen/verbunden wenn es Nil ist. Da aber ja Result vom Typ LongInt ist weis ich nicht so recht wie machen. Mit Assigned(Result) will es nicht so wirklich! Danke! |
Re: Problem mit Funktion WNetAddConnection2
Öhm... entweder es ist ein Pointer (was ich mir nicht vorstellen kann; dann würde "null" im MSDN stehen) oder es ist ein Handle, in beiden Fällen kannst auf "=0" prüfen.
|
Re: Problem mit Funktion WNetAddConnection2
Nil (Delphi) NULL(c++) laut MSDN
|
Re: Problem mit Funktion WNetAddConnection2
Moin Mackhack,
vielleicht solltest Du Dir, beispielsweise, mal das PSDK bei MS runterladen, oder die MSDN-Library. In der Dokumentation zu RegConnectRegistry steht dann auch, was als Rückgabewert möglich ist. Nimm aber bloss nicht das SDK, das bei Delphi mitgeliefert wird, das ist nicht aktuell. [EDIT] Ich hab' jetzt mal in der D2006-Hilfe (SDK) nachgeschaut: Es ist zwar vom Februar 2003, aber bezüglich RegConnectRegistry dürfte die Doku stimmen. [/EDIT] |
Re: Problem mit Funktion WNetAddConnection2
Zitat:
|
Re: Problem mit Funktion WNetAddConnection2
Nil ist als Ordinaltyp in Form eines Ganzzahltyps 0! Das wurde aber zuvor schon geschrieben...
|
Re: Problem mit Funktion WNetAddConnection2
Hi Muetze1,
also Result einfach auf <> 0 pruefen fuer wenn es nil ist oder = 0 fuer nil *AufDerLeitungSteh*? Sorry, ich frag nur nochmal zwecks Verstaendnis! |
Re: Problem mit Funktion WNetAddConnection2
Ich habe nur darauf hingewiesen, dass NIL = 0 wäre. Ob nun Gleichheit oder nicht hängt von der Doku ab. Wenn die MSDN nun als sagt, dass ein Parameter bei bestimmten Bedingungen Nil ist, dann würdest du ja theoretisch schrieben:
Delphi-Quellcode:
- da dies nun nicht geht, nehmen wir den ersten Teil und ersetzen Nil mit dem oben angegebenen Ersatzwert:
If var = Nil Then
Delphi-Quellcode:
.
If Var = 0 Then
Wenn die Variable ungleich Nil/NULL sein sollte laut Doku, dann sollte man das entsprechend anpassen... |
Re: Problem mit Funktion WNetAddConnection2
Danke!
|
Re: Problem mit Funktion WNetAddConnection2
Hi,
ich habe nochmal ne Frage hier: mit meiner jetzigen Funktion die soweit so aussieht
Delphi-Quellcode:
bekomme ich bei (eigentlich) Erfolgreichem Login- und Verbindungsversuch die letzte ShowMessage um die Ohren gehauen mit dieser Meldung
function TfoMain.RegLoginAndConnectRegistry(lpMachineName: String; hKey: HKEY;
var phkResult: HKEY; User, Password: String): LongInt; var lpNetResource: TNetResource; begin with lpNetResource do begin dwType := RESOURCETYPE_ANY; lpLocalName := nil; lpProvider := nil; lpRemoteName := PChar(lpMachineName + '\IPC$'); end; Result := WNetAddConnection2(lpNetResource, PChar(Password), PChar(User), 0); if ( Result = NO_ERROR ) then begin Result := RegConnectRegistry(PChar(lpMachineName), hKey, phkResult); if ( Result = 0 ) then begin ShowMessage('Error occurred: ' + SysErrorMessage(GetLastError) + #10#13#10#13 + 'Error Code: 0x' + IntToHex(GetLastError, 8)); Exit; end; end; end; [QUOTE --------------------------- Keysearcher --------------------------- Error occurred: Overlapped I/O operation is in progress Error Code: 0x000003E5 --------------------------- OK --------------------------- [/QUOTE] und anschliessend kommt das richtige Ergebnis. Aufgerufen wird die Function so:
Delphi-Quellcode:
Danke!
if ( RegLoginAndConnectRegistry(foNetworkConnection.RemoteComputerName, Key, UsersKey, Username, Password) <> 0 ) then
[edit=Christian Seehase]Doppelpost gelöscht. Mfg, Christian Seehase[/edit] |
Re: Problem mit Funktion WNetAddConnection2
Moin Mackhack,
Du hast doch die Doku zu RegConnectRegistry gelesen. Bei erfolgreichem Aufruf gibt diese ERROR_SUCCESS zurück, warum fragst Du dort dann auf = 0 ab? ERROR_SUCCESS hat den Wert 0. Um einen Fehler zu ermitteln, müsstest Du also auf <> ERROR_SUCCESS bzw. <> 0 abfragen. [EDIT] Ausserdem ist Zeilenvorschub #13#10 und nicht #10#13 ;-) [/EDIT] |
Re: Problem mit Funktion WNetAddConnection2
Hallo Christian,
ich dachte ich ueberpruefe (laut Muetze1) ob das Result Nil ist: Zitat:
|
Re: Problem mit Funktion WNetAddConnection2
Ähm... du übergibst da einen PChar. Wenn der nil ist (= leerstring) verbindest du dich mit dem lokalen pc. Oder steht da irgendwo was von return value?
|
Re: Problem mit Funktion WNetAddConnection2
OK,
und wie koennte ich nun diese miesere beseitigen? Ich meine das mit dem wenn NULL! |
Re: Problem mit Funktion WNetAddConnection2
Wenn ich den Beitrag von Christian richtig verstehe, meldet RegConnectRegistry Fehler mit Werten <> 0 und Du musst nur folgende Zeile ändern.
Delphi-Quellcode:
Du scheinst irgendwie den Computernamen und den Rückgabewert von RegConnectRegistry zu verwechseln.
// if ( Result = 0 ) then
if ( Result <> 0 ) then |
Re: Problem mit Funktion WNetAddConnection2
Hallo Tobias,
ich fürchte du bist auf der Jagd nach einem Phantom. Da ist kein Vergleich auf NULL nötig in deinem Code. Sowohl WNetAddConnection2() als auch RegConnectRegistry() liefern einen Fehlercode (DWORD oder LONG). Der einzige sonstige Ausgabeparameter ist das Key Handle bei RegConnectRegistry(), welches du später wieder mit RegCloseKey() freigeben sollst. Der Maschinenname kann als Leer-String angegeben werden - PChar() ist dann NIL. Das erfordert aber keine andere Vorgehensweise im inneren deiner Funktion. Und wieder machst du eine Netzwerk-Funktion zu einer Methode deiner Form... Gute Nacht |
Re: Problem mit Funktion WNetAddConnection2
Hi marabu,
ja ich weis. Werde das noch aendern. Gestern abend um 11 hatte ich keine Lust mehr das alles zu aendern. Werde mich aber heute damit noch beschaeftigen! |
Re: Problem mit Funktion WNetAddConnection2
Moin Meniskusschaden,
so hatte ich mir das gedacht, obwohl ich, aus Gründen der Lesbarkeit, statt der 0 lieber die Konstante ERROR_SUCCESS nehme. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:41 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