N久没有用VC6了,突然要用它还真有些不顺,现在把今天遇到的问题记下,以便备忘。
一、fatal error C1010是预编译头(precompiled headers)错误,编译时出现该错误一般是因为工程设置中要求使用预编译头,而某些C/C++源文件中没有包含对stdafx.h预编译头文件的include,解决方法:
1、不使用预编译头,直接在工程设置里关闭使用预编译头的选项(选择setting,在c/c++栏,选择PreCompiled headers,然后设置第一选项,选择不使用预编译头);
2、使用预编译头。由于预编译头辅助文件为stdafx.cpp,是C++文件类型,因此产生的预编译头也只适用于C++环境,不能用于C环境下,这样就要求工程中必须只包含纯粹的C++源文件,每个源文件必须在开头加入#include "stdafx.h"以包含stdafx.h,这时无法进行C/C++混合编译。
二、链接动态链接库的方法:方法一:windows提供了一套函数,用于加载动态链接库中的符号(函数和变量),调用这些函数去加载:
1. HINSTANCE LoadLibrary( LPCTSTR lpLibFileName);
2. FARPROC GetProcAddress( HMODULE hModule, LPCWSTR lpProcName);
3. BOOL FreeLibrary( HMODULE hLibModule);
这最直观的一种方法,同时也是最麻烦的一种办法。
方法二:让调用者的工程依赖于动态链接库工程。步骤如下:
1. 让调用者的工程处于active状态下。
2. 打依赖设置对话框:Project-->dependencies。
3. 选择动态链接库工程。
这种方法比较方便,但要求有DLL的项目文件。
方法三:直接把动态链接库产生的.lib文件加入到调用者的工程中。
方法四:进入Link设置:Project-->settings-->Link,选择Categery中的Input,在object/library modules里输入的动态链接库对应的.lib文件名,在Additional library path中输入动态链接库对应的.lib的路径。
方法五:#pragma comment(lib, "filename.lib")
其中方法二是我最经常忘记的。