vc常见问题

1、fatal error C1189错误

下面是程序的错误!

c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(24) : fatal error C1189:
#error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]


TestMain.cpp 

c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(24) : fatal error C1189:
#error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
错误已经很明白告诉你了: 
#error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

使用多线程动态连接运行时库的MFC程序, 需要使用MFC动态连接库. 
改工程设置: 
Project|Properties|Configuration Properties|General|Use of MFC : Use MFC in a 
Shared DLL


2 不能将参数 N 从“char *”转换为“LPCWSTR”的解决方案

执行
MessageBox(NULL,Temp,"Application Error",MB_ICONSTOP);
时出现以下错误:
error C2664: “MessageBoxW”: 不能将参数 2 从“char *”转换为“LPCWSTR”
其中定义:
char* Temp=new char[200];
请问怎么改啊?

MessageBox(NULL,Temp,"Application Error",MB_ICONSTOP);
改为
MessageBoxA(NULL,Temp,"Application Error",MB_ICONSTOP);

因为你的程序在UNICODE(宽字节)字符集下运行,如果调用了 MessageBox ,实际上调用的是 MessageBoxW 函数;
如果你的程序在 ANSI 字符集运行,调用 MessageBox ,就相当于调用 MessageBoxA;
其中 MessageBoxW 支持 UNICODE;
MessageBoxA 支持ANSI;

UNICODE与ANSI 有什么区别呢?简单的说,UNICODE版的字符比ANSI 的内存占用大,比如:
Win32程式中出现的标准定义 char 占一个字节,
而 char 的UNICODE版被定义成这样:
typedef unsigned short wchar_t ;占2个字节。

所以有字符做参数的函数相应也用两个版本了。

宽字节版函数中带有字符参数的都应该用宽字节版的字符参数,将字符串转换成宽字节很容易:
比如将 "Application Error" 转换成UNICODE版,只需在它前面使用一个定义了的宏,如下:
L"Application Error" ,或者TEXT("Application Error" )都可以

所以你应将 MessageBox(NULL,Temp,"Application Error",MB_ICONSTOP); 改为:
MessageBox(NULL,Temp,L"Application Error",MB_ICONSTOP);


3、unresolved external symbol __endthreadex错误的解决方法

在用VC6.0写程序调试时,初学者总是会遇到一些错误,针对如下错误主要是因为MFC类库没有引用所出现的问题。
错误现象:
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex

nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex

Debug/jnHid.exe : fatal error LNK1120: 2 unresolved externals

Error executing link.exe.

解决错误的方法:

选择Project-Settings--General--Microsoft foundation Classes

下拉列表中有三个选项:

1、Not using MFC

2、Use MFC in a Static Libray

3、Use MFC in a Shared DLL

错误提示:

nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex

nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex

libcd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main

Debug/Hello.exe : fatal error LNK1120: 3 unresolved externals

第一种解决方法:

1、“Project”->“settings”->“c/c++”“Catagory” 选择“Code Generation”“use run-time library”选择“debug multithreaded”

此时确定一般解决问题,也有可能出现如下问题提示:

libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main

Debug/Hello.exe : fatal error LNK1120: 1 unresolved externals

此时,进行第二步操作:

2、

[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:console改成/subsystem:windows

温馨提示:在Project Options窗口,右边滑动条向下滑动就会找到该项!

总结:进行以上两步操作后,问题解决!

第二种解决方法:

1.检查是否包含头文件afx.h

2.打开project->settings->general->microsoft foundation classes->选use MFC in a static library或选 use

MFC in a shared DLL(需要把MFC的动态库放在system32文件夹下) .


4、VS2008上编译问题

VS2008IDE:
编译时出现问题:
error C2471: 无法更新程序数据库“d:\my documents\visual studio 2008\projects\mdib\mdib\debug\vc90.pdb”

error C1083: 无法打开程序数据库文件:“d:\my documents\visual studio 2008\projects\mdib\mdib\debug\vc90.pdb”: No such file or directory

修改设置:
C\C++ | General | Debug Information format | C7 Compatible (/Z7)  
就可以了.
我是用 (/ZI) 出这个问题.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值