Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [C++] Username auslesen (https://www.delphipraxis.net/63051-%5Bc-%5D-username-auslesen.html)

Luckie 14. Feb 2006 15:26

Re: [C++] Username auslesen
 
Dass du irgendwas falsch machst. Und es nicht an deinem Computer, sondern an deinem Code liegt. Leider kenne ich mich mit C++ auch nicht so gut aus. Vergleich einfach mal.

sniper_w 14. Feb 2006 16:00

Re: [C++] Username auslesen
 
Ohne TypeCasting ist bei mir alles OK.
Code:
#include <iostream>
#include <windows.h>

#define INFO_BUFFER_SIZE 32767

struct dataBuf
{
   TCHAR ComputerName[INFO_BUFFER_SIZE];
   TCHAR UserName[INFO_BUFFER_SIZE];
   TCHAR SysDir[INFO_BUFFER_SIZE];
   TCHAR WinDir[INFO_BUFFER_SIZE];
};


dataBuf pData;
DWORD  countChar = INFO_BUFFER_SIZE;

using namespace std;

int main()
{

if( !GetUserName(pData.UserName, &countChar) )
{
   cout << GetLastError() << endl;
}


cout << "user name: " << pData.UserName << endl;
   return 0;
}

Airblader 14. Feb 2006 17:14

Re: [C++] Username auslesen
 
Also ohne Typecast gehts mir genauso wenig :/

@Luckie
Naja, ich habs ja testweise anders gemacht. Und da gings genauso wenig :gruebel:

tommie-lie 14. Feb 2006 17:49

Re: [C++] Username auslesen
 
Zitat:

Zitat von sniper_w
Ohne TypeCasting ist bei mir alles OK.

Wo ist ein Typecast? Du meinst wohl Erzeugen eines std::string. ;-)

Der Typ TCHAR ist laut MSDN auf einem Unicode-System als WCHAR definiert. std::string gips aber nicht für wchars, sondern nur für (ANSI-)chars. Mein Compiler wirft mir wenigstens einen Fehler um die Ohren, wenn ich ein wchar_t-Array als Parameter an den std::string()-ctor übergebe. Probier's also mal entweder mit einem Container, der Strings unterstützt (in GNUs libstdc++ zum Bleistift std::wstring, oder std::basic_string<wchar_t> und eine passende Spezialisierung selber implementieren) oder mit einem single-byte Typ, also einfach char[] statt TCHAR[]. Systemabhängige Typen zu verwenden ohne die Funktionen anzupassen ist sowieso eine gefährliche Sache. Wenn du wirklich einen String aus wchars haben willst, solltest du auch GetUserNameW() verwenden.
Ich kann zwar nicht ausprobieren, ob das ganze mit GetUserName() funktioniert, aber zumindest das erzeugen eines std::strings aus einem char[] funktioniert bei mir (GCC 4.0.2) wunderbar:
Code:
#include <iostream>
#include <string>

int main(int argc, char* argv[])
{
  char pdata[42];
  strcpy(pdata, "blubb");
  std::cout << std::string(pdata) << std::endl;
  return 0;
}
kompiliert mit gcc -Wall ohne Warnungen und arbeitet wie erwartet.

Airblader 14. Feb 2006 22:09

Re: [C++] Username auslesen
 
Aaaah, ich habs endlich raus ;)
Ganz simpel:

countChar wurde einfach zuviel genommen beim Abrufen des Computernamens (wahrsch. alles). Dadurch wurde das zu klein.
Simples Neu-Definieren von "countChar = INFO_BUFFER_SIZE;" vor dem Aufruf von GetUserName hat bereits gereicht ;)

Danke trotzdem an Alle :)

air


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 Uhr.
Seite 2 von 2     12   

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