Konvertieren LPWSTR

Geht nicht hatte ich schon , dabei kommen nur Kästchen raus. Auch wenn ich das Projekt umstelle auf Unicode
Das kann dann z.B. an der verwendeten Kodierung liegen. Bist du dir sicher, dass in shi502_netname ein String in UTF16-LE drin steht bzw. das dieser String überhaupt gefüllt wurde?

Welches Betriebssystem setzt du ein? Du hast nicht zufällig auf eine nicht-Truetype Schriftart umgestellt? Evtl. kann das Zeichen in dem String nicht dargestellt werden (weil es in dem aktuellen Font nicht vorhanden ist).

Gruß
 
Das kann dann z.B. an der verwendeten Kodierung liegen. Bist du dir sicher, dass in shi502_netname ein String in UTF16-LE drin steht bzw. das dieser String überhaupt gefüllt wurde?

Welches Betriebssystem setzt du ein? Du hast nicht zufällig auf eine nicht-Truetype Schriftart umgestellt? Evtl. kann das Zeichen in dem String nicht dargestellt werden (weil es in dem aktuellen Font nicht vorhanden ist).

Gruß
Laut Fehlermeldung ist es ein LPWSTR Konvertierungsfehler. Nutze Studio 2008 und hab ealles auf Standard. Habe beim debuggen ein Chinesisches Zeichen , was vorraussichtlich nicht angezeigt wird in der MessageBox. Ich glaube dre Fehler liegt schon weiter oben ich poste noch mal den Begin.
C++:
void  CClient::freigaben_suchen(System::String^ name)
{
	SHARE_INFO_502 BufPtr,p;
	SHARE_INFO_502 temp;
	NET_API_STATUS res;
	LPTSTR lpszServer = LPTSTR("SSCHROEDER-PC");
	DWORD er=0,tr=0,resume=0, i;
	res = NetShareEnum(lpszServer, 502, (LPBYTE *) &BufPtr, -1, &er, &tr, &resume);
	System::String^ w ;
	do 
	{
		temp=BufPtr;
		System::String^ temp2 = marshal_as<System::String^>(temp.shi502_netname);
		System::Windows::Forms::MessageBox::Show(w);
	}
	while (res==ERROR_MORE_DATA);
}
So sieht es nun komplett gecleant aus alles auf Standard aber ich bekomme nichts raus. Ausser im Debugmode wo ich schaue wo was drin ist.
 
Was ist der Rückgabewert der NetShareEnum Funktion?

Du solltest sicherstellen, dass es NERR_SUCCESS ist.

Die Anzahl der ermittelten Resourcen hast du dann in "er". Damit kannst du eine einfache for-Schleife benutzen.

Falls ERROR_MORE_DATA zurückgegeben wird, ist dein Puffer nicht groß genug um alle Daten aufzunehmen.

Es ist auf keinen Fall eine gute Idee die Daten einfach blindlings ohne Prüfung des Rückgabewerts zu benutzen.

Gruß
 
Nun bin ich verwirrt mein Konsolen Programm funktioniert so:
Und temp.shi502_netname gibt mir einen LPWSTR zurück.
Aber ich denke heute nochmal darüber nach was ich da gemacht habe.
res benutze ich nur um zu schauen wieviel ich denn zurück bekomme an Daten. Für einen Datensatz nicht sehr wichtig nur für mehrere.
Und diese Konvertierung klappt in der Konsole prima als Text ausgabe und genau diesen Wert brauche ich halt:
C++:
 ido 
	{
		
		res = NetShareEnum(lpszServer, 502, (LPBYTE *) &BufPtr, -1, &er, &tr, &resume);
		if(res == ERROR_SUCCESS || res == ERROR_MORE_DATA)
		{
			for(i=1;i<=er;i++)
			{
			temp=BufPtr;
			System::String^ temp2 = marshal_as<System::String^>(temp.shi502_netname);
			System::Windows::Forms::MessageBox::Show(temp2);
			}
		}
	}
	while (res==ERROR_MORE_DATA);


MFG
Oli

p.s wie gesagt ich denke irgendwo am Start hab eich einen Gedankenfehler nur wo
Nachtrag er macht was aber eben irgendein Sonderzeichen
Langsam weiss ich nimma weiter, Im debugmode finde ich nicht wieso
 
Zuletzt bearbeitet:
So glaube ist gelöst ! Ich hab eaber keine Ahnung wieso. Ich habe diese Zeilen nochmals verglichen:
C++:
PSHARE_INFO_502 BufPtr,p;
	NET_API_STATUS res;
	LPTSTR   lpszServer = TEXT("SSCHROEDER-PC");
	DWORD er=0,tr=0,resume=0, i;
Und es fehlte der erste Buchstabe PSHare usw. ich hatte nur SHARE . Somit sehe ich nun auch echte Buchstaben wie c:\ usw.
Nun wrede ich mal wieder ans Konvertieren machen. Ich danke Euch allen.

MFG
Oli
 
Zuletzt bearbeitet:
Zurück