do {\
*crLine=__LINE__; return; case __LINE__:;\
} while (0)
问题:error C2051: case 表达式不是常量,按照宏替换的道理,__LINE __应该是会换成行号,是整数常量
解决方法:这是由于编辑器的配置环境导致的,可在项目->属性->C/C++->常规中将调试信息格式改为/Zi即可
因为使用/ZI表示编辑并继续运行,所以__LINE__应该可以中途变动,必然不能是常量,
而case要求__LINE__在编译之前就决定为常数,不能是动态修改的,这样两者就相冲突。
2、
1>WINCTRLS.obj : error LNK2019: 无法解析的外部符号 __imp__MakeDragList@4,该符号在函数 _prefslist 中被引用
1>WINCTRLS.obj : error LNK2019: 无法解析的外部符号 __imp__LBItemFromPt@16,该符号在函数 _pl_itemfrompt 中被引用
1>WINCTRLS.obj : error LNK2019: 无法解析的外部符号 __imp__DrawInsert@12,该符号在函数 _handle_prefslist 中被引用
1>WINDOW.obj : error LNK2019: 无法解析的外部符号 __imp__InitCommonControls@0,该符号在函数 _WinMain@16 中被引用
1>WINDOW.obj : error LNK2019: 无法解析的外部符号 _ImmGetCompositionStringW@16,该符号在函数 _WndProc@16 中被引用
1>WINDOW.obj : error LNK2019: 无法解析的外部符号 _ImmReleaseContext@8,该符号在函数 _WndProc@16 中被引用
1>WINDOW.obj : error LNK2019: 无法解析的外部符号 _ImmSetCompositionFontW@8,该符号在函数 _WndProc@16 中被引用
1>WINDOW.obj : error LNK2019: 无法解析的外部符号 _ImmGetContext@4,该符号在函数 _WndProc@16 中被引用
1>WINDOW.obj : error LNK2019: 无法解析的外部符号 _ImmSetCompositionWindow@8,该符号在函数 _sys_cursor_update 中被引用
1>WINDOW.obj : error LNK2019: 无法解析的外部符号 __imp__PlaySoundW@12,该符号在函数 _do_beep 中被引用
1>D:\_Code\VLAN\Debug\VLAN.exe : fatal error LNK1120: 10 个无法解析的外部命令
这是缺少数据库导致的!
此时可以查询MakeDragList和ImmSetCompositionWindow等等这些函数,这样就能知道程序缺少的是什么样的lib文件了。
此时有两种方法:
a、项目 属性 连接器 输入 附加依赖项中加入相应的.lib文件。如comctl32.lib并加上头文件commctrl.h
b、或加入#pragma comment(lib, "comctl32.lib")