Frage zu Netscan

partitionist

Erfahrenes Mitglied
Hab mir mal den das Tutorial angeschaut:
http://www.tutorials.de/tutorials117448.html

Jetzt hab ich eine Funktion geschrieben die den Domainnamen zurückgeben kann, aber jetzt weiß ich nicht wie ich den Typ StringToString in ein ganz normalen string umwandeln kann, denn wenn ich es mit dieser Methode Domain() ausgebe dann bekomme ich irgendwelche Zahlen

Code:
string Domain()
{
	// unsere Map
	StringToString dic;
	// der Iterator der für die Map
	StringToString::iterator iter;
	
	bool ret;

	NetworkBase net;

	// hier holen wir uns die domains/workgroups
	ret = net.NetScan(&dic, NULL, &ErrorHandling, "", RESOURCEDISPLAYTYPE_DOMAIN);
	if(!ret)
	{
		//ErrorHandling(NULL, 0, "NetScan fehlgeschlagen");
		return "Fehlgeschlagen";
	}

	// wurden domains gefunden ?
	if(!dic.size())
	{
		//cout << "Keine Domains/Wourkgroups gefunden" << endl;
		return "Keine Domains/Wourkgroups gefunden";
	}
	
	// iterate der domains und ausgeben
	iter = dic.begin();
	cout << "Folgende Domains gefunden:" << endl;
	while(iter != dic.end())
	{
    	cout << "Domain: " << iter->first << " | Kommentar: " << iter->second << endl;
		
		iter++;

		string str = iter->first;
		return str;
	}

	// wir speichern uns die 1. domain
	iter = dic.begin();
	string firstDomain = iter->first;
	// dann löschen wir die map
	dic.clear();

return "";

}
 
Also ich sehe, dass du den String zu spät speicherst:
Code:
while(iter != dic.end())
	{
    	cout << "Domain: " << iter->first << " | Kommentar: " << iter->second << endl;
		
		iter++;

		string str = iter->first;
		return str;
	}
Dort passiert zuerst ein iter++, was den Iterator-Zeiger in der Map "weiterschieb" dann liesst du nochmal mit iter->first, obwohl der Iterator evtl. schon auf dic.end() zeigen könnte, d.h. du liest nur noch müll aus dem speicher, verlager bitte das iter++; weiter nach unten dann sollte das gehen was du willst:
Code:
while(iter != dic.end())
	{
    	cout << "Domain: " << iter->first << " | Kommentar: " << iter->second << endl;
		


		string str = iter->first;
		return str;

		iter++;
	}
In diesem Fall macht natürlich die Schleife keinen Sinn mehr und du wirst immer nur die 1. Domäne bekommen, aber du wirst schon wissen was du tust :-)

Daniel
 
Wie kann ich alle Domains auslesen, hab versuvht ein string str vor der Schleife zu initialisieren und dann in der schleife wird str += iter->first; dazugehängt, aber sobald return str hinter der schleife steht, kommt ein Fehler
 
Zurück