大家好,谢谢你花时间看我的问题。 我正在制作这个程序的运行时出错,我把它缩小到一个
std::string str(id.Description, (sizeof(id.Description)/sizeof(id.Description[0])));
这是完整的功能
bool isItNvidia()
{
IDirect3D9* pD3D9 = NULL;
pD3D9 = Direct3DCreate9( D3D_SDK_VERSION );
if(pD3D9)
{
UINT dwAdapterCount = pD3D9->GetAdapterCount();
for( UINT iAdapter = 0; iAdapter < dwAdapterCount; iAdapter++ )
{
D3DADAPTER_IDENTIFIER9 id;
ZeroMemory( &id, sizeof( D3DADAPTER_IDENTIFIER9 ) );
pD3D9->GetAdapterIdentifier( iAdapter, 0, &id );
//std::cout<< id.Description<<std::endl;
/*
wchar_t wtext[MAX_DEVICE_IDENTIFIER_STRING];
std::mbstowcs(wtext, id.Description, strlen(id.Description)+1);
LPWSTR ptr = wtext;
MessageBox(NULL, ptr, L"nigg", MB_OK);
*/
std::string str(id.Description, (sizeof(id.Description)/sizeof(id.Description[0])));
std::string comp="NVIDIA";
if(str.find(comp) != std::string::npos)
{
return true;
Beep(300, 500);
}
}
}
return false;
pD3D9->Release();
delete pD3D9;
}
您还需要d3d9.h和d3d9.lib文件。
我不知道为什么会这样做 id.Description是一个字符数组
如果有人可以提供帮助,我会非常感激。 感谢
答案 0 :(得分:7)
只需使用std::string str(id.Description);
说明:
可能会调用此构造函数,这不是您想要的:
basic_string( const basic_string& other,
size_type pos,
size_type count = std::basic_string::npos,
const Allocator& alloc = Allocator() );
pos
参数将导致垃圾地址。
答案 1 :(得分:0)
您收到错误,因为C Runtime(CRT)未正确初始化。请在此处查看问题的可能原因: http://msdn.microsoft.com/en-us/library/9ecfyw6c.aspx