1、不能将参数 1 从“char [10]”转换为“LPTSTR”
源码:
int iNum1,iNum2,iNum3; char cNum1[10],cNum2[10],cNum3[10]; GetDlgItem(IDC_EDIT1)->GetWindowText(cNum1,10); GetDlgItem(IDC_EDIT2)->GetWindowText(cNum2,10); iNum1 = atoi(cNum1); iNum2 = atoi(cNum2); iNum3 = iNum1 + iNum2; itoa(iNum3,cNum3,10); GetDlgItem(IDC_EDIT3)->SetWindowText(cNum3);
采用新的类型定义,char --》TCHAR,将atoi--》_ttoi,将itoa--》_itot即如下,
int iNum1,iNum2,iNum3; TCHAR cNum1[10],cNum2[10],cNum3[10]; GetDlgItem(IDC_EDIT1)->GetWindowText(cNum1,10); GetDlgItem(IDC_EDIT2)->GetWindowText(cNum2,10); iNum1 = _ttoi(cNum1); iNum2 = _ttoi(cNum2); iNum3 = iNum1 + iNum2; _itot(iNum3,cNum3,10); GetDlgItem(IDC_EDIT3)->SetWindowText(cNum3);
解决办法2:
右击当前项目,选择属性,在项目默认值下面的“字符集”选项改为“使用多字节字符集”就可以了。这是多种编程语言标准不统一造成的。
2、.连接错误:
(1)fatal error LNK1000: Internal error during IncrBuildImage dllAudioHook dllAudioHook
最近在VS2008上做项目,不是很习惯,就编译速度上VS2008就要慢很多,这是公认的,而且还在链接的时候老出现LINK : fatal error LNK1000: Internal error during IncrBuildImage这个错误,但是在编译链接一次就没有问题了,据说这是链接器的问题。上网查了下资料,出现这个问题的人倒是挺多的,有两种方法可以解决:
第一种:下载补丁,链接地址为https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=11399,我下载下来了装不上,说我没装VS2008(我想可能是版本不对或者其他问题,我的系统是win7旗舰版,VS2008是中文版的)。
第二种:修改链接选项,方法:项目->属性->链接器->常规,下面的“启用增量链接”,将“是(/INCREMENTAL)”改为“否(/INCREMENTAL:NO)”,然后确定就可以了。
用这种方法修改之后,编译会出现下面的警告:
Warning 1 warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/INCREMENTAL:NO' specification dllAudioHook.obj dllAudioHook
(2)error LNK2019: unresolved external symbol "public: __thiscall CAudioHook::~CAudioHook(void)" (??1CAudioHook@@QAE@XZ) referenced in function "public: virtual __thiscall CAutioHookDemoDlg::~CAutioHookDemoDlg(void)" (??1CAutioHookDemoDlg@@UAE@XZ) AutioHookDemo.obj AutioHookDemo
网上有很多种解释:有说是unicode问题的;有说是编译环境问题的。
看来发生这种状况的原因有很多。
我遇见的是没有在dll生成导出类或导出函数。以导出函数为例,在函数前面加上:extern "C" __declspec(dllexport)
就行了。
3、在vs2008里创建MFC工程
File->New->Project
左侧选择:Other Languages->Visual C++->MFC
右面选择:MFC Application
下面输入名字,选择路径,OK。
进入MFC Application Wizard,在弹出窗口点击Next
在弹出窗口选择Application Type(就像VC一样):Single document/Multiple documents/Dialog based
点击Next
剩下都是一些工程特性设置,没有特殊要求则可以直接点击Finish。
4、在vs2008中添加lib库的方法
方法一:
点击菜单命令 “项目/属性”,弹出项目属性对话框;或者在解决方案视图或类视图中,右击项目名称,选“属性”,弹出项目属性对话框;在弹出对话框的活动配置中,选择“配置属性/链接器/输入/附加依赖项”,即可输入待加入的lib库文件,添加完毕点击“应用”或“确定”按钮。如果要对所有的配置添加lib库文件,可先将活动配置切换为“所有配置”。
在“配置属性”---“连接器”---“常规”的“附件库目录”填上库所在的目录名,这个目录名最好是在工程文件夹中建一个专门放lib的文件夹。
方法二: #pragma comment(lib,"libname.lib")
5、进入对话框编辑界面(和vc有些不一样)
view->Other Windows->Resource View
在主窗口左侧会出现“Resource View”区,点开工程文件夹,点开.rc路径就会出现各种资源路径,其中就包括Dialog路径,去里面找你要编辑的对话框吧。
如果点开.rc里面什么都没有,提示“Opened in another editor”,说明在代码编辑区里有资源文件已经被打开了。关闭所有.rc/Resource.h文件,再试一次。
6、引入DirectSound SDK
正常情况下,vs会把windowsSDK自动引开发环境,但是DirectSound则需要手动添加进来。步骤如下:
Tools->options,弹出Options对话框
在左面选择:Projects and Solutions->VC++ Directories
在右面选择:
Platform: Win32(若64位机器则选择x64)
Show directories for: Library files,下面出现当前包含的lib路径
点击“new line”按钮(或在下面列表框空白处双击),新增一行空记录
点击右面的“...”按钮,选择DirectSound SDK lib路径,如:D:\Program Files\Microsoft DirectX SDK (March 2009)\Lib\x86(若64位则选择x64)
重新选择Show directories for: Includes files
在列表框里新增一条记录,选择DirectSound SDK include路径,如:D:\Program Files\Microsoft DirectX SDK (March 2009)\Include
点击“OK”,退出配置窗口。
7、定义Static Text的对象
在窗口上添加Static Text控件之后默认生成的ID是IDC_STATIC,但是这个ID不允许生成对象,在程序需要操作它就不太方便(虽然也能)。想定义对象就要:
先改掉默认ID,如将其自定义成IDC_DISP;
再右键控件,选择 Add Variable...,弹出Add Member Variable Wizard对话框;(以后编辑时也这样做)
对象可以定义成两种类型:Control、Value,这里选择Value,在Category里;
在Variable name里输入对象名称,如:m_csdisp;
点按钮finish完成定义;
以后对该对象的定义进行修改也在这个窗口进行(貌似不能修改名字)。
使用:
CString strtext = _T("test text");
m_csDisp = strtext;
UpdateData(FALSE);
另,对Static Text空间不定义对象在代码里也是可以操作的,如修改内容:
SetDlgItemText(IDC_STATIC, strtext);
8、 dialog中文显示问题
描述:dialog、button等的caption为中文时,显示出“??”,英文显示正常。
解决:
打开Resource View,找到有问题的dialog,如“IDD_DEMO_DIALOG”;
右键,选择Properties;
修改属性窗口里的Language项为:Chinese(Simplified,PRC)