C++ WriteConsoleOutputCharacter访问冲突
我一直试图在cmd上执行一个命令,我正在使用WriteConsoleOutputCharacter。我的代码如下:C++ WriteConsoleOutputCharacter访问冲突,c++,cmd,C++,Cmd,我一直试图在cmd上执行一个命令,我正在使用WriteConsoleOutputCharacter。我的代码如下: int main( void ) { HANDLE hStdout; hStdout = GetStdHandle(STD_OUTPUT_HANDLE); fun(hStdout,L"file1",L"file2"); return 0; } void fun( HANDLE hConsole,wchar_t* str1,wchar_t* str
int main( void )
{
HANDLE hStdout;
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
fun(hStdout,L"file1",L"file2");
return 0;
}
void fun( HANDLE hConsole,wchar_t* str1,wchar_t* str2 )
{
COORD coordScreen = { 0, 0 }; // home for the cursor
LPDWORD cCharsWritten=0;
//LPDWORD cCharsWritten; that was originally
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD dwConSize;
if( !GetConsoleScreenBufferInfo( hConsole, &csbi ))
{
return;
}
dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
std::wstring ss;
ss=std::wstring(L"cp ")+ str1+std::wstring(L" ")+str2;
if( !WriteConsoleOutputCharacter( hConsole, // Handle to console screen buffer
ss.c_str(), // Character to write to the buffer
dwConSize, // Number of cells to write
coordScreen, // Coordinates of first cell
cCharsWritten ))// Receive number of characters written
{
return;
}
if( !GetConsoleScreenBufferInfo( hConsole, &csbi ))
{
return;
}
if( !FillConsoleOutputAttribute( hConsole, // Handle to console screen buffer
csbi.wAttributes, // Character attributes to use
dwConSize, // Number of cells to set attribute
coordScreen, // Coordinates of first cell
cCharsWritten )) // Receive number of characters written
{
return;
}
SetConsoleCursorPosition( hConsole, coordScreen );
}
代码编译得很好,但首先我收到一个错误,说我在使用CCharsWrite时没有初始化它。因此我将它设置为0(LPDWORD ccharsWrite=0;),但随后我继续得到
Unhandled exception at 0x772c5033 in CpProgrammatically.exe: 0xC0000005: Access violation reading location 0x00446000.
在调用WriteConsoleOutputCharacter的行中。
我尝试了几乎所有我能想象到的东西,但我无法理解。我使用CCHARSWRITED变量的方式是否有问题?ss是unicode字符串的事实是否有问题?非常感谢提供任何帮助。您传递给
CCHARSWRITED
的参数是函数填充的out参数打电话的时候。假设您传递一个指向DWORD
的指针。您传递的是一个空指针
将减容更改为:
DWORD cCharsWritten = 0;
然后将其作为&ccharsWrited
传递给函数,以便函数可以使用写入的字符数填充变量
另外,确保
ss
中的字符数等于dwConSize
中的字符数。看起来您要传递的字符串指针的长度可能不等于dwConSize
。请改用ss.length()
。首先感谢您的回答。事实上,我已经尝试了您在看到WriteConsoleOutputCharacter定义时提出的建议(我刚才又尝试了一次以确保)但结果是完全相同的,在同一点上出现了一个异常。我添加了另一个可能的解决方案。Tyrns out dwConSize是您建议的问题。我使用(DWORD)ss.length()作为参数,而不是它,以确保长度没有问题,并且一切正常。如果您愿意,请将此添加到您的答案中,并感谢您的帮助!