Почему при вызове(в WinXP) GetUserName Код (Text): username db 255 dup (?) invoke GetUserName,addr username,sizeof username invoke MessageBox,hwnd,addr username,0, MB_OK выскакивает ошибка?
Aspire Инструкция по адресу такуму-то обратилась к память по адресу такому-то. Память не может быть "read".
Подскажите пожалуйста по похожему вопросу. Есть код, но почему-то функция возвращает пустую строку. Тестил на разных учетных записях - результат аналогичный. Система ХР. Или функция устарела, или (что более вероятно), где-то ошибка в коде. Код (Text): .386 .model flat,stdcall option casemap:none include \masm32\include\kernel32.inc include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\Advapi32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\Advapi32.lib .const .data lpUsername db 256 dup (0) capt db "Asm",0 .data? nSize dd ? .code Start: Invoke GetUserName,addr lpUsername,addr nSize Invoke MessageBox,0,addr lpUsername,addr capt,0 Invoke ExitProcess,0 end Start
Образец Ваш не компилил может эта: из мздэна DWORD bufCharCount = INFO_BUFFER_SIZE; // Get and display the name of the computer. bufCharCount = INFO_BUFFER_SIZE; if( !GetComputerName( infoBuf, &bufCharCount ) ) printError( TEXT("GetComputerName") ); _tprintf( TEXT("\nComputer name: %s"), infoBuf ); // Get and display the user name. bufCharCount = INFO_BUFFER_SIZE; if( !GetUserName( infoBuf, &bufCharCount ) ) printError( TEXT("GetUserName") ); _tprintf( TEXT("\nUser name: %s"), infoBuf );
GetUserName - возвращает юникод, а MessageBox возможно ANSII попробуйте использовать MessageBoxW + размер валидный указывайте
artkar, а что значит в Си код bufCharCount = INFO_BUFFER_SIZE; ? В плане, как это выглядит в Асме - обычный буфер или что-то другое? h0t, к сожалению, не помогло. Что интересно, на Си все получилось. Тоже не получалось, потом убрал в MessageBox указатель на буфер, и вставил его напрямую - и заработало. Код (Text): #include <stdio.h> #include <windows.h> int main() { char buf [256]; DWORD sized; sized=sizeof(buf); GetUserName(buf,&sized); MessageBox (0,buf,"cc",MB_OK); }
nSize dd 256 - когда указал это, все заработало. Большое спасибо за помощь. Я думал, что в данном случае, nSize это out, т.е. в него передается к-тво байт.