Windows编程的兼容性问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/gamer727/article/details/47720889


问题出现在软件发布之后,在个别用户的电脑上的win7系统运行我们的软件总是无法运行,运行就直接给出“XXX module 已停止工作”的提示框,但是如果运行选中运行程序右键,在兼容性那里选择“XP (sp3)”后又能正常运行。但是更奇怪的是在我们公司里的win7系统同样运行,无需选择兼容性,直接就能正常运行,而且很多用户上的电脑也是win7系统,同样也是能正常运行。自己的系统上怎么样也重现不了这种问题,后来没办法,只能把每条语句都打印出来,远程有问题的系统上,一步一步跟踪。

后来就发现是这个个API出了问题:

MMRESULT mixerGetLineInfo(
  HMIXEROBJ hmxobj, 
  LPMIXERLINE pmxl, 
  DWORD fdwInfo     
);

后来在微软的官网查了一下,其中的一段:

Requirements

  Windows NT/2000/XP: Included in Windows NT 3.1 and later.
  Windows 95/98/Me: Included in Windows 95 and later.
  Header: Declared in Mmsystem.h; include Windows.h.
  Library: Use Winmm.lib.
  Unicode: Implemented as Unicode and ANSI versions on Windows NT/2000/XP.

那就只有把它给注释掉了,反正暂时也没什么用。


另外,在部分的XP系统上,客户端会出现“axwin frame window 系统错误”,后来排查后发现是“huishiCamInterface.dll”里有个api有问题,也是把它注释掉,出问题的客户端也不再弹出这样的错误了:

CNormalAudioHelper::PrepareAudioInputDevList();
CNormalAudioHelper::GetAudioInputDevList();

展开阅读全文

WINDOWS编程

03-05

最近学习WINDOWS编程,从书上抄了一篇代码练习,结果无法编译运行。也不知道是出了什么问题,还请高手指点。rnrn现将编译器认为有问题的代码及编译指示列出如下:rnrnint APIENTRY WinMain(HINSTANCE hInstance,rn HINSTANCE hPrevInstance,rn LPSTR lpCmdLine,rn int nCmdShow)rnrn WNDCLASS wc;rn MSG msg;rn bool bQuit = false;rn if(MessageBox(NULL, "show full screen?","run fullscreen?" , MB_YESNO|MB_ICONQUESTION) == IDNO)rn rn fullscreen = 0;rn rnrn wc.style = CS_OWNDC;rn wc.lpfnWndProc = WndProc;rn wc.cbClsExtra = 0;rn wc.cbWndExtra = 0;rn wc.hInstance = hInstance;rn wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);rn wc.hCursor = LoadCursor(NULL, IDC_ARROW);rn wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);rn wc.lpszMenuName = NULL;rn wc.lpszClassName = "Name";rnrn RegisterClass(&wc);rnrn if(fullscreen)rn rn ChangeResolution(640,480,16);rn hWnd = CreateWindowEx(NULL,"Name", "Lesson1",WS_POPUP|WS_CLIPSIBLINGS|WS_VISIBLE,rn 0,0,rn GetSystemMetrics(SM_CXSCREEN),rn GetSystemMetrics(SM_CYSCREEN),rn NULL, NULL,rn hInstance,rn NULL);rn rn elsern rn hWnd = CreateWindow(NULL,rn "Name",rn "Lesson1",rn WS_TILEDWINDOW|WS_VISIBLE,rn GetSystemMetrics(SM_CXSCREEN)/2 - sw/2,rn GetSystemMetrics(SM_CYSCREEN)/2 - sh/2,rn sw,rn sh,rn NULL, NULL,rn hInstance,rn NULL);rnrn ChangeDisplaySettings(NULL, 0);rn rnrn ShowWindow(hWnd, SW_SHOW);rn rn UpdateWindow(hWnd);rnrn EnableOpenGL();rn SceneInit(sw,sh);rnrn if(!fullscreen)rn rn GetWindowRect(hWnd, &rect);rn sw = rect.right - rect.left;rn sh = rect.bottom - rect.top;rnrn if(sw > 0 && sh > 0)rn SceneResizeViewport(sw,sh);rn rn elsern rn SceneResizeViewport(GetSystemMetrics(SM_CXSCREEN),rn GetSystemMetrics(SM_CYSCREEN));rn rnrn while(!bQuit)rn rn if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))rn rn if(msg.message == WM_QUIT)rn bQuit = true;rn elsern rn TranslateMessage(&msg);rn DispatchMessage(&msg);rn rn elsern rn SceneShow();rn SwapBuffers(hDC);rn rn rnrn DisableOpenGL();rnrn ShowWindow(hWnd, SW_HIDE);rn DestroyWindow(hWnd);rnrn ChangeDisplaySettings(NULL, 0);rnrn return msg.wParam;rnrn return 0;rn rn rnrnrn输出窗口rn正在编译...rnstdafx.cpprn正在编译...rnopengl.cpprnd:\exercise\opengl\opengl\opengl\opengl.cpp(190) : error C2664: “MessageBoxW”: 不能将参数 2 从“const char [18]”转换为“LPCWSTR”rn 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换rnd:\exercise\opengl\opengl\opengl\opengl.cpp(204) : error C2440: “=”: 无法从“const char [5]”转换为“LPCWSTR”rn 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换rnd:\exercise\opengl\opengl\opengl\opengl.cpp(217) : error C2664: “CreateWindowExW”: 不能将参数 2 从“const char [5]”转换为“LPCWSTR”rn 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换rnd:\exercise\opengl\opengl\opengl\opengl.cpp(231) : warning C4002: “CreateWindowW”宏的实参太多rnd:\exercise\opengl\opengl\opengl\opengl.cpp(231) : error C2664: “CreateWindowExW”: 不能将参数 3 从“const char [5]”转换为“LPCWSTR”rn 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换rnd:\exercise\opengl\opengl\opengl\opengl.cpp(283) : warning C4244: “return”: 从“WPARAM”转换到“int”,可能丢失数据rn 论坛

没有更多推荐了,返回首页