关于vc++的问题,没有学过vc++编程,在网上找了个关于MFC的简单例子。编译影片时出错出错,求指点

虽然我学了C++,
但初学,拿着这课本总是好难!
谁是过来人,讨教一些经验,重谢!!
回复讨论(解决方案)
硬着头皮看
初学是难,我中间放弃了一两次,所以只有坚持!
自己做些有趣的程序如俄罗斯方块等,或者看别人的源代码,只要完成一个和看懂一个较大的程序(对初学者来说,过1000就不错了)
我只能说这个了,也对我自己
从windows消息机制学起
FIRST&SEE&A&SDK&KNOWLEGE,EG:WINDOWS&PROGRAM
THE&SEE&A&深入浅出MFC
AT&LAST&&&MFC&WINDOW&&
初学者要如何学习&C++【我见我闻我感我思】&
最近看到许多人问初学者应该怎样学习的问题
正好看到候先生的这篇文章,很有感触
贴出来大家看看
初学者要如何学习&C++【我见我闻我感我思】
最近&CompBook&版的一个题目:「初学者要如何学习&C++」,又引发一长串讨论。每天
我啜着咖啡,看着一篇篇的长短文,在精譬与幼稚、深远与浅薄、骂声与辩白之间,固
然得稍遣一日下来的疲惫身心,聊以为茶馀饭後之资。但是看着日渐众多的贴信,想到
某些问题,心情也不很轻松得起来。
我有一些感触。
●不要骂人
学问高、技术好,固然可以说话比较宏声,比较强势,比较得到大家的尊敬与体谅,别
人也比较不敢招惹,但不表示可以出口骂人。「废物、白痴、人渣、丑角」,这些骂人
的话实在不宜。
不可以骂人,是网路的基本礼仪。「不可以」可以从两个层面来说。法律上来讲,网路
上之不可以骂人也许是个灰色地带,被骂者多半也不会诉诸大动作。所以除非是名人被
骂,或名人骂人,而且咽不下一口气,多半只是清风徐来,水波不兴。
我要谈的是修养层面上的「不可以骂人」。我要谈的是上网基本守则,就像谈做人的基
本道理一样。
有些人的行事采「直率」原则,必要赤裸裸地表现自己的情绪而後快,至於礼仪诸等,
则或斥之「伪善」。网路是个不露脸的世界,也大量容忍了这等「直率」。但是如我常
说的『文如其人』,文字表现了作者的为人处世、心境修养、学问技术。为文能不慎乎
古云「君子不欺暗室」,意思是虽处於无人得见之暗室,亦不做欺心败德之事(唐骆宾
王.萤火赋:类君子之有道,入暗室而不欺)。网路这个虚拟世界,就像一个大暗室,虽
然别人不得见你的真面目,你在暗室中的一切行为,仍忠实映照你自己。
昨天,我顺道载来元智旁听课程的交大学生回竹。途中刚好他提起&CompBook&版的这阵
热闹。我淡然地说:不该骂人。学生说:可是有人本来就该被骂。
哦,是吗?&
如果说这个世界是「观念可能有点偏差、技术可能有点不足、态度又没让你顺眼的人,
便该骂」,那麽我说,骂人有骂人的技巧与艺术,你骂人的表现这麽粗糙这麽差劲,「
观念可能有点偏差、技术可能有点不足、态度又没让我顺眼」,也该骂罗?
不,你不该被骂。所以他也不该被骂。
要表现尖锐与犀利,另有办法;请不要用骂,尤其是像「废物、白痴、人渣、丑角」这
或有人说,我的个性就是这样,直率是我的座右铭。那也依得。我刚才说了,网路是个
不露脸的世界,大量容忍了这等「直率」。我写这篇文章,原也意不在影响骂人文章的
作者(我想我没有这样的能力),&我想影响的是骂人文章的读者&─&你。
指责别人是多麽地容易,检讨自己是多麽地不容易。我回想自己的文章,也出现过情绪
性字眼。虽是一个比拟,非特定指哪个人,还是觉得有点惭愧。
●文如其人
衍生而来的,我还想说的是,竞速的时代,以及台湾教育的偏颇,造成了网路上的文字
错别字连连、逻辑不通、语意不畅┅。大家都急就章地,有什麽想法就脱口而出,线上
回覆;不但不检阅,甚至不重读第二遍就按键送出。
文如其人。如果你连自己出手的文字&─&代表自己思想的东西,都这麽不在乎不谨慎,
你会对什麽在乎?你在乎的大概只剩功利铜臭之阿睹物。如果现实生活中你是谨言慎行
的,到了暗室却如脱疆野马,这让我想起现实社会中许多彬彬有礼之士,上了自家车驾
驶座,便换了张头脸,骂声连连,闪超挤推,下得车来又彬彬有礼。
可是你,就是你,只有一个你。哪个是真实的你呢?半夜问问自己。
●初学者要如何学习&C++
发问者,有能力从回信内容判断回信者的经验,进而估量其正确性或适用性,进而决定
自己的采用度吗?
如果能,大概不会问这个问题。如果不能,应该不必问这个问题。
网路上这些年的悠游经验,使我轻易可以判断哪一种题目又有好戏看了,哪一种题目又
要引爆口水战乃至口角战&─而且最後只是一场混战,筛子上留没几家伙。
我们感谢热心的回信者,他们热切提供自身经验,不论自己是一年经验、三年经验、五
年经验、十年经验┅。不论自己是&1/4&瓶水或半瓶水,或&3/4&瓶水或满瓶水。
我想知道,以发问者的水平,如何判断和取舍这些回覆?
通常我们寻求这类学习之道(这是对自己非常重要且关键的问题),不应向陌生人求助
,那於事无补。因为陌生人的经历你一无所知,为什麽他的学习之道值得你遵循?你既
无法判知,就没有必要发问。
为什麽不问你的老师?你的学长?你的同学?那是你看得见摸得到的人,如果你佩服他&
们的能力,你就可以询问他们的学习经验。因为你知道他们的表现,所以你可以决定你
的采信度。
对发问者而言,这样是不是有意义多了?
●三不政策
现代学生有三不政策:不讲话,不回答,不要问我。不论是在大学殿堂,或是公司职训
,我往往面对沉默的台下,所以我也学会从来不做田野调查&─&要人举手点数那种。
是的,连举手都有人不愿意。任何会曝露自己任何状态的动作,统统拒绝。
这大概是为什麽大家喜欢上网发问的原因了。呵,没人知道我是谁。
学生心头有惑,不喜欢上课问,喜欢下课问。我完全知道症结所在。因为你心里头挣扎&
『这个问题有水准吗?藏拙算了,不要自曝其短』。於是上焉者下课来问,下焉者完全
有的老师回答某些层次不高的问题时,会带着揶揄的表情或口吻。这种老师应该为现代
学生的三不政策负点责任。
不愿自曝其短,是正常的人性。那麽,你应该做的是,课前预习。唯有课前预习,或课
後复习,才有信心你所问的问题有没有水准,不是吗?我真不知道现在还有多少学生有
课前预习的习惯。我的班上有一位,我很欣赏他的积极。
下学期我让大家都带面具上课,保证问题多得不得了&:)
●十倍速学习
只要保持一个原则,你就可以十倍速学习。
课前预习,课後复习。
那麽,上课时你的吸收力,便是别人的十倍。速度虽是一种绝对值(其实宇宙间没有绝
对)&,也是一种相对感觉。你的吸收力是别人的十倍,那你不是十倍速学习,是什麽?
你每堂课课前花一小时,课後花一小时,便比别人考试前花二十小时还有价值。
但是因为短视,看不见未来,贪玩,所以做不到。哎!
课前预习,课後复习。老调!
古调虽自爱,今人多不弹。
从一连串&C++&学习之道的讨论信中,衍生出&C&和&C++&的关系、C&和&C++&的能力比较
老掉牙的问题!
有人不认为&C++&比&C&优秀,认为别人大力捧&C++&是因为没看过那种「C&功力出神入化
」之神人,那种「C&语言程度高到让人难以想像」之怪物。
是的,我确信,所有&C++&能做的事,C&都做得到。&Inside&the&C++&Object&Model&&(
中译《深度探索&C++&物件模型》,侯俊杰译,&峰&1998)或是&&The&Annotated&C++&R
eference&Manual&(无中译本)书中,把许多&C++&的奥秘(例如&object&model,&vptr
,vtbl,&template,&inline...)都曝露出来,读者甚至可以因此写个C++&编译器(当然
,方向有了,你可能需要知道更多实作细节)。
也许,C++&编译器便是以&C&语言完成的(我不确知)。
那麽,有什麽是&C++&做得到而&C&做不到的呢?
大不了写个具有&C++&编译器功能的&C&library&附在&C&程式身上,还有什麽办不到的。
问题是,「可用」不见得「最好」。想想付出的代价。
我接触&C++&的前数年中,和同事有时候会去听些课程。我的慧根差,连&OOP&都转不过
来;我的同事慧根好一些,略可掌握&OOP。至於&OOA/OOD,我们两人都嗤之以鼻,私下
窃想,那些腾云驾雾高来高去的老师,自己到底懂不懂呀。
但是我们只敢互相调侃开玩笑,不敢真的公开表达。即使表达,也语多保留,容有回旋
因为我们知道,OO&这一软体界的大势,这麽多人的研究,这麽多人的赞美,不可能没有&
原因。我们也知道自己之不悟,怕只因自己的浅薄。
後来我因此对&OO&失去兴趣,改攻&Windows(programming&&&OS),我的同事则继续深
究。他虽不喜欢看书,但&C++/OOP&的书倒是狠K了不少,并以个人卓越的&programmin
g&功夫,在这个领域成为专家。
我自己终於在研究&MFC&的时候,不得不痛下决心好好搞&C++/OOP。所以我是为了运用一
套&C++&class&library,才开始学&C++。要搞当然就要搞点成绩(并且也因为搞出兴趣
),所以才往object&model,&framework&infrastructure,&generic&paradigm继续搞下
我再说一次,「可用」不见得「最好」。
我再说一次,一种技术,一种&paradigm,得到多人(可说是整个业界)的推崇与赞美,
不可能没有原因。
眼界未开的时候,要知道自己眼界未开,保持谦逊。
十年前,我有了第一部车。於是我开始知道坐在驾驶座上的各种状况。
有一天我和朋友夜至景美访友,坐朋友的机车去。机车大灯坏了,我很担心,要他闪方
向灯一路骑去。他斥为无稽,并且说台北路灯那麽亮,我们看得见别人,别人也看得见
但我知道汽车座里的驾驶从反光镜看不见我们。
是看得见,但是要仔细看。如果仔细看反光镜,就无法分神看前方,所以驾驶人看反光
镜都是目光一瞥而已。在夜间,只有灯光才能让他瞥到。他不是在看後方有没有物体,
他是在看後方有没有灯光。
我很庆幸在冒险夜骑那辆没大灯的机车後,现在还活着。
我的朋友没开过车,所以他不知道这种情况。我开过车,所以我知道。这是我和他在那
个时候,就交通工具的驾驶而言,层次上的差异。
我开小客车,所以对於七人座厢型车、九人座厢型车也都能够轻易掌握,立刻上手。但
是要我开&10&轮大货卡、两吨半、甚至怪手,我就知道有级次(order)上的障碍需要克
服。要我开飞机,那级次的障碍就更高了。
机车的驾驶难度,以及可游距离,和汽车有1个级次的差距。汽车的驾驶难度,以及可&
游距离,和飞机有n个级次的差距。
所以我们没有办法和井里的青蛙谈广阔的天,和河里的鱼蚌谈汪洋的海,和燕雀谈鸿鹄
但是我们必须有谦逊的心:在级次更高的人面前,我们便是他们眼中的井蛙、河鱼和燕
VC入门的一条路&
首先声明,我可不是什么高手,也就是刚脱贫。因为运气很好,买到了几本好书,在学习过程中几乎没走什么弯路,没费什么劲就入门了,现在一般的小程序能搞定了。看到那些因为不知从何下手而苦苦挣扎的朋友,希望我的文章能给他们一些帮助。
学编程急不得,上来就学VC肯定碰一头灰,说VC难就难在这点上了。如果硬上,意志坚强的话也许能挺过来,但也是会缺乏后劲,不得不回过头来补习基础知识。意志不坚强的话,很有可能就此放弃了,并留下一个VC难得不得了的印象。其实,只要踏踏实实一步一步来,VC也就是很简单点事。在这里我说一下,如果你还只是一个初中生,那么你就应当仔细考虑一下了。首先,限于你的知识和思维能力,学学C语言还应该没问题,但要学VC是要下相当大的功夫的。而且,你现在学到的东西将来一定会过时,所以不如把精力放在算法的研究上,毕竟这些东西永远都不会过时。
我觉着如果走对路子,入门VC,一个暑假应该够用了。
虽说学VC并不是传说的那么难,可不下些苦功夫是学不成的。在学VC前,你必须确定,你是因为热爱编程才学VC的,而不是出于炫耀或其他。否则,恐怕你坚持不到胜利的那一天。&
对于首次接触编程的同学,我建议最好先学一下Quick&BASIC(DOS里就有带,就是那个QBASIC.EXE),不用多学,知道什么是整型什么是浮点,以及DO...LOOP&FOR...NEXT&等最基本的知识,能算个阶乘,求个积分就行了,关键要明白计算机是怎么执行命令的,对编程有个感性认识。如果你对自己有自信,也可以直接学C++,应该也不会多费太多事。不过我觉着因为有很多资料是FOR&VB的,并且网页编程常用VB&Script,以后你也很有可能要用到VB,所以了解一些BASIC对以后也是有帮助的。而且如果只是要算个小题用QB比VC、VB之类方便多了。(找个人教一两天应该就能搞定了吧)
之后我建议找本初高中信息学奥赛的书(有些奇怪吧)。这些书里讲解了基本的算法,写的却比较通俗,没什么高深的数学知识,容易理解。这些东西在数据结构课程中有系统严密的讲解,所以也可等以后再学。但我觉着现阶段写一些小程序,实现些常用算法对自己的思维是很好的锻炼,对以后的学习大有好处。我想,能排排序,求个八皇后,算个汉诺塔,再知道深、广度优先搜索就可以了。
如果你已经有一些编程的基础知识了,自然就可以跳过以上两步。
等你对编程有一定的认识后,就应该开始进军C++了.注意,是C++而不是VC,这两者根本不是一码事!别买VC入门,你肯定看不懂!C++是一门语言,而VC教程则是讲解如何使用MFC类库,学习VC应建立在充分了解C++的基础上。
我觉着比起许多花花绿绿的大全、宝典,不如买本大学的C++教程(注意:别买等级考试的教程,那是应试用的),那些教程大都经过反复锤炼,比较系统,很有含金量,有不会太贵。这里我暴力推荐由清华大学出版社出版的一本《C++程序设计教程》,封面是红色的,封底是黄色的,看起来很朴素,主编是钱能。这本书简直是好的没法说,还便宜(39.5元)。这本书不但告诉你语法,还告诉你为什么要这样规定语法,看完之后,你会觉着那许许多多的规定是理所当然的,根本不用费心记,不但不枯燥,反而会使有一种美感。书中还有许多实际编程时应注意的问题,很有价值。这本书还配有《实验指导》,和《习题集》,不过对于有一定编程经验的人应该是用处不大,所以我没买。除了这本书,我建议再买本关于传统C语言的书,要着重以下几个方面:编译预处理、typedef的使用,位运算,标准库函数的使用(最好有一个比较详细的列表,用的时候好查)。
C++的标准类模板是个不错的东东,不过对于学习MFC却没有帮助,原因是MFC太落后了(^_^),可以先放一放,要不要学等搞定MFC时再作决定。虽然我没怎么学过,不过觉着它挺不错,而且代表了一种发展方向。虽然学着费劲(那东西几乎没一点C++的样子,简直是在学新语言),但掌握它可使编程轻松不少。
学完了C++,该学VC了吧?别急,先找本WIN32编程的书,这次没什么讲究,看着差不多的,便宜一些的就行了,如果有对于VC集成环境的介绍就最好了。WIN32编程是指用WINDOWS&API编程,MFC是将众多的API函数进行了封装的类库,用起来方便了不少,但如果没有一些API编程基础,对相关概念不了解,学起MFC来可能会很费解。相信我,将来你不会觉着学API编程是浪费时间的。API函数有两千多,要都学会累死。其实你只要知道如何创建窗口、对话框、控件、消息循环,了解了句柄的含义就差不多了,最好再了解一点GDI编程。这个阶段的关键是要理解WIN32程序是如何运作的,把握各种窗口间的关系。因为你以后应该很少直接用WIN32&SDK编写程序,所以关键是理解整体结构,记住几个函数并没有什么意义。函数用的时候可以现查。手头应有一份比较全面的资料。中文的API函数大全好像只有For&VB的,不过看起来应该是没有任何障碍。英文的资料MSDN中就有,相当全面,也比中文的详细一些。我建议用中文资料快速查找,有问题再看英文。(我忘了我的html版中文API大全是从哪下载的了,不过书店有售,白皮的,很厚一本,很贵就是了。谁想要可以与我联系)
对于想学游戏编程的朋友注意:从现在起,你不必去学什么MFC了,相信我,那东西除了让你头疼一点用处都没有。游戏都使用Win32&SDK编出来的。现在,你要学的是DirectX。我推荐老王翻译的DirectDraw文档(),前面有一些老王自己写的基础知识,很适合入门,&在此特别感谢老王的辛勤劳动。我还买了一本《DirectX&7&速成教程》,机械工业出版社出版,封面封底都是红色。除了翻译惨了点还算不错,介绍的挺全面,还有一些游戏编程基础知识。如果你想图省事,可以考虑用云风编写的风魂游戏库,很方便的(&对云风的辛勤劳动表示感谢).不过我仍然建议至少了解一下DirectX.这里说一下,很多朋友抱怨找不到有关DirectX的书籍,我告诉你,别去编程书籍里找,去多媒体制作书籍那找,还要把眼睛瞪得大大的、圆圆的。Director..&Director..&DirectX!!!知道了吧,书店工作的人眼神都不大好,我也是有一天没事瞎转才发现的,吓了我一大跳。发现这个秘密后我发现其实有不少关于DirectX的书,只是一般人找不到罢了。学会了DirectX,就可以开始奋斗了,剩下的问题就只有积累经验了。
对于志向是应用软件的朋友,打好了基础,现在进军VC的障碍都已扫清了。不过还是应做好充分的思想准备,事情不会那么顺利的。刚开始,你就要面对一个瓶颈,大量的紧密关联的知识,使你必须一下理解一个整体,而很难一点点来。可以说,学VC最难的就是刚开始。情况有些类似于你第一次创建窗口时面对的那长长的程序,只不过更糟糕就是了。很多人就是在此被一大团知识噎着,放弃了学习。事实上,这几乎是Windows编程的一大特点,在WIN32编程时你就应当有所体会,而DirectX和COM都有类似问题。记住,一定要坚信:突破了这个瓶颈之后便是一片海阔天空,而有着扎实基础的你是一定能闯过去的。
我的建议是,不要等彻底弄明白一句才看下一句,而是知道好像怎么回事就向下看,实在看不懂也硬着头皮往下看,等能比猫画虎的作出个菜单、对话框时便回过头再看一遍,几遍之后应该就可以大概明白MFC程序的运作了。注意:这里有个关键,一定要用心体会面向对象编程的精神,努力将眼前的程序与你之前所学的知识联系起来。通过比较成员函数和对应的API函数间的区别,尝试去理解MFC是怎样封装相关的API的。例如,相当多的类将句柄封装了起来,在传递参数时加以省略,这就是一个很重要的特性。MFC中有许多的宏,看起来很奇怪,但你不必理会其实现方法,只要知道如何使用便可,这点也很重要。还有,千万不要过于依赖ClassWizard,对于其生成的代码要自己进行分析,偷懒就不能真正理解MFC。
这里我介绍一种学法,不过学法这种东西因人而异,所以还要根据个人的情况决定。开始时,教程让怎么办就怎么办,比猫画虎的作出个菜单、对话框,然后试着添加控件。等能不看教程便做到这些时,开始逐字逐句的试着理解MFC程序的组织。若看不懂就跳过看下面的。就这样一遍一遍来。如果觉着头大就先歇上两天,等清醒了再接着来.最好在这期间多找些介绍MFC框架的文章。注意:先不要碰有关文档/视结构的东西,否则你会更头大。然后便可试着写个定时器、名片夹之类的小东西,熟悉一下各种控件的使用。&突破了开始的瓶颈之后再学下去便会越学越容易,因为你可以一点一点的积累知识,而不用担心被噎着了。再过不久,你就不得不开始使用API函数完成一些功能,如在系统托盘加图标,自画列表框等。这时,你也会体会到学习WIN32编程的好处了,没学过的人很可能就此卡壳。
关于VC的教程遍地都是,但鱼龙混杂,市场乌烟瘴气,骗钱的书真不少。有些书很厚,内容当然也很全,对老鸟很不错,但对于初学者似乎有些浪费钱,因为里面绝大部分的东西MSDN中都有,并且初学者用不着。老外写的书一般内容不错,但翻译水平是个问题。如果翻译糟糕可够你受的,加上价格不菲,我也不建议初学者买。还有些什么傻瓜书、图解之类,好像是面向初学者,时则为骗钱,你看完后除了那几个例子什么也不会作。如果你看到有一本书花了大量的篇幅图文并茂,生动形象的介绍如何画图,输出文字,别买!骗钱的!(:-&&我就被坑去42块现大洋)那些花哨的东西对初学者除了转移注意力没任何好处。如果你真的对GDI绘图很感兴趣,就去找些专门书籍,比那些书好多了。最好买名字类似于VC应用,VC编程之类比较正式的,图不要太多的,字不要太大的,最好是有较多的控件介绍的。当然,文字流畅也是很重要的。书不要买太多,最多两本,因为这些书内容都差不多,买多了的话东看西看反倒没好处。在这里,我建议初学者先别急着掏钱,而是去VC王朝(&http://vcdynasty.yeah.net/)下载本MFC教程。虽说是网上教程,却当相当有水准。不但内容比较全面,还一句废话也没有(这里感谢作者的辛勤劳动)。只是可惜对GDI没有一点介绍,还须其他书籍作补充。等搞定这本教程时,应该就已
无他,多做。
不错!学习
看完了谢谢
上面几位朋友说的都很好,谢谢
嗯,上面的朋友说得很好,我也感觉是这样,先学懂C,C++,再找几本VC的好书看一看,不过要一本本的看完,每本看完都会有收获的!再就配上多在机上实践!OK,谢谢!关于VC++编译过程出现的错误
关于VC++编译过程出现的错误
准备对接口卡进行二次开发,对所附带的 CANUSB2A接口卡附带的VC++例程进行了调试,出现好多错误,本人VC新手,请教解决方法。
DWORD code,mask,timing0,timing1;
定义变量timing0,timing1时,调试出现由整形转化为字符型,可能存在数据的丢失
conversion from 'unsigned long' to 'unsigned char', possible loss of data
当连续运行几次,错误提示消失,这是什么原因?
Linking...
testDlg.obj : error LNK2001: unresolved external symbol &public: virtual __thiscall CTestListBox::~CTestListBox(void)& (??1CTestListBox@@UAE@XZ)
testDlg.obj : error LNK2001: unresolved external symbol &public: __thiscall CTestListBox::CTestListBox(void)& (??0CTestListBox@@QAE@XZ)
testDlg.obj : error LNK2001: unresolved external symbol &unsigned long __stdcall VCI_CloseDevice(unsigned long,unsigned long)& (?VCI_CloseDevice@@YGKKK@Z)
testDlg.obj : error LNK2001: unresolved external symbol &unsigned long __stdcall VCI_InitCAN(unsigned long,unsigned long,unsigned long,struct _INIT_CONFIG *)& (?VCI_InitCAN@@YGKKKKPAU_INIT_CONFIG@@@Z)
testDlg.obj : error LNK2001: unresolved external symbol &unsigned long __stdcall VCI_OpenDevice(unsigned long,unsigned long,unsigned long)& (?VCI_OpenDevice@@YGKKKK@Z)
testDlg.obj : error LNK2001: unresolved external symbol &unsigned long __stdcall VCI_StartCAN(unsigned long,unsigned long,unsigned long)& (?VCI_StartCAN@@YGKKKK@Z)
testDlg.obj : error LNK2001: unresolved external symbol &unsigned long __stdcall VCI_ResetCAN(unsigned long,unsigned long,unsigned long)& (?VCI_ResetCAN@@YGKKKK@Z)
testDlg.obj : error LNK2001: unresolved external symbol &unsigned long __stdcall VCI_Transmit(unsigned long,unsigned long,unsigned long,struct _VCI_CAN_OBJ *,unsigned long)& (?VCI_Transmit@@YGKKKKPAU_VCI_CAN_OBJ@@K@Z)
testDlg.obj : error LNK2001: unresolved external symbol &unsigned long __stdcall VCI_ReadErrInfo(unsigned long,unsigned long,unsigned long,struct _ERR_INFO *)& (?VCI_ReadErrInfo@@YGKKKKPAU_ERR_INFO@@@Z)
testDlg.obj : error LNK2001: unresolved external symbol &unsigned long __stdcall VCI_Receive(unsigned long,unsigned long,unsigned long,struct _VCI_CAN_OBJ *,unsigned long,int)& (?VCI_Receive@@YGKKKKPAU_VCI_CAN_OBJ@@KH@Z)
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/testDlg.exe : fatal error LNK1120: 13 unresolved externals
执行 link.exe 时出错.
这种错误怎么解决?
第一个问题:这个类型转换警告只会在重新编译的时候出来,连着运行就不会再提示
第二个问题:引起LNK2001的原因很多,你最好能把整个工程发上来,帮你看看。刚才找了一些讲解这个的,也许对你有用。
学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于
编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,
编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误,常常使人不
明其所以然。如果不深入地学习和理解VC++,要想改正连接错误LNK2001非
  初学者在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为:
  unresolved external symbol “symbol”(不确定的外部“符号”)。
  如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或
标签,将产生此错误消息。一般来说,发生错误的原因有两个:一是所引用
的函数、变量不存在、拼写不正确或者使用错误;其次可能使用了不同版本
的连接库。
  以下是可能产生LNK2001错误的原因:
  一.由于编码错误导致的LNK2001。
  1.不相匹配的程序代码或模块定义(.DEF)文件能导致LNK2001。例如,
如果在C++ 源文件内声明了一变量“var1”,却试图在另一文件内以变量
“VAR1”访问该变量,将发生该错误。
  2.如果使用的内联函数是在.CPP文件内定义的,而不是在头文件内定
义将导致LNK2001错误。
  3.调用函数时如果所用的参数类型同函数声明时的类型不符将会产生
  4.试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001。
  5.要注意函数和变量的可公用性,只有全局变量、函数是可公用的。
  静态函数和静态变量具有相同的使用范围限制。当试图从文件外部访问
任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001。
  函数内声明的变量(局部变量) 只能在该函数的范围内使用。
  C++ 的全局常量只有静态连接性能。这不同于C,如果试图在C++的
多个文件内使用全局变量也会产生LNK2001错误。一种解决的方法是需要时在
头文件中加入该常量的初始化代码,并在.CPP文件中包含该头文件;另一种
方法是使用时给该变量赋以常数。
  二.由于编译和链接的设置而造成的LNK2001
  1.如果编译时使用的是/NOD(/NODEFAULTLIB)选项,程序所需要的运行
库和MFC库在连接时由编译器写入目标文件模块, 但除非在文件中明确包含
这些库名,否则这些库不会被链接进工程文件。在这种情况下使用/NOD将导
致错误LNK2001。
  2.如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC
时将得到“unresolved external on _WinMain@16”的LNK2001错误信息。
  3.使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,
源文件中对“func”的引用,在目标文件里即对“__imp__func” 的引用。
如果试图使用静态库LIBC.LIB或LIBCMT.LIB进行连接,将在__imp__func上发
生LNK2001;如果不使用/MD选项编译,在使用MSVCxx.LIB连接时也会发生LNK2001。
  4.使用/ML选项编译时,如用LIBCMT.LIB链接会在_errno上发生LNK2001。
  5.当编译调试版的应用程序时,如果采用发行版模态库进行连接也会产
生LNK2001;同样,使用调试版模态库连接发行版应用程序时也会产生相同的
  6.不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可
能包含早先的版本没有的符号和说明。
  7.在不同的模块使用内联和非内联的编译选项能够导致LNK2001。如果
创建C++库时打开了函数内联(/Ob1或/Ob2),但是在描述该函数的相应头
文件里却关闭了函数内联(没有inline关键字),这时将得到该错误信息。
为避免该问题的发生,应该在相应的头文件中用inline关键字标志内联函数。
  8.不正确的/SUBSYSTEM或/ENTRY设置也能导致LNK2001。
  其实,产生LNK2001的原因还有很多,以上的原因只是一部分而已,对初
学者来说这些就够理解一阵子了。但是,分析错误原因的目的是为了避免错
误的发生。LNK2001错误虽然比较困难,但是只要注意到了上述问题,还是能
够避免和予以解决的。  
请遵守网上公德,勿发布广告信息
相关问答:

我要回帖

更多关于 c语言多文件编程 例子 的文章

 

随机推荐