GetUserName dlaczego nie moze by tak?

0

Witam,

Mam do napisania kod, ktory wyswietla nazwe uzytkowniaka, znalazlem jak powinna wygladac funkcja GetUserName ale nie czemu nie moge uzyc string jako pierwszy argument jak tak zrobie to wyswietla(wyswietlanie przez MessageBox) mi sie pusty napis.

[DllImport("User32.dll")]
        public static extern int MessageBox(int owner, string text, string tittle, int type);
        //type - zawiera flagi, które określają wygląd i zachowanie się okna dialogowego
        [DllImport("advapi32.dll", SetLastError = true)]
        static extern bool GetUserName(string username, ref Int32 length);

        static int Main()
        {
            string Buffer="";
            int nSize = 257;
            GetUserName(Buffer, ref nSize);
            return MessageBox(0, Buffer.ToString(), "Username", 0);
        }
1

Takie użycie zmiennej string username nie spowoduje że do tej zmiennej zapisania zostanie jakakolwiek wartość; Nie wiem czy dodanie ref sprawi że to zacznie działać, ale w http://www.pinvoke.net/default.aspx/advapi32.getusername , proponują użycie StringBuilder zamiast string.

0

Tak, jeśli chodzi o łączenie bibliotek z innych języków, to StringBuilder zamiast string. String jest specyficznym tworem. Na niskim poziomie to po prostu tablica znaków. Ale na tym poziomie abstrakcji to jest po prostu jakaś klasa. C++ też ma jakąś klasę string. To są oczywiście zupełnie różne klasy. Dlatego też na stringach się nie operuje. Po stronie C++ to jest tablica znaków, po stronie C# to jest StringBuilder. Przy czym powinieneś jeszcze pilnować kodowania (UTF lub ANSI).

1 użytkowników online, w tym zalogowanych: 0, gości: 1