方法1: 选择项目->属性->预处理器->预处理定义, 增长:HYCOMMONWINAPI_EXPORTS
方法2:
就是在
#ifdef HYCOMMONWINAPI_EXPORTS
#define HYCOMMONWINAPI_API __declspec(dllexport)
#else
#define HYCOMMONWINAPI_API __declspec(dllimport)
#endif
前面增长 #define HYCOMMONWINAPI_EXPORTS
其实这两种方法都是增长定义
方法3:在你的dll cpp文件中把
#define HYCOMMONWINAPI_EXPORTS
加在#include <接口文件.h>
的前面
方法4:右击dll工程 -- 属性,打开属性页,展开:配置属性 -- C++ --预处理器,在预处理器定义的最后面填入:_AFXEXT,再次编译则搞掂。
以上方法逐一试下,不知道能不能帮到你。另外这种问题最好去CSDN社区去问比较好,百度上牛X的人比较少,我就常常去CSDN。数据库
很是郁闷的是,这个问题在relaese dll时又会出现,并且,上面的第4种解决方式没有做用,其它的几种方式暂时不甚了解到底怎么操做,由于第3种方法按它的作,出错windows
--------------------------------------------------------------------------------------------------------多线程
VS2003 IDE中常见问题【转】函数
VS2003 IDE 笔记
我在安装Microsoft Visual Studio.Net的时候,老是出现这样的提示:“安装程序检测到另外一个程序要求计算机从新启动。必须从新启动计算机后才能安装Visual Studio.Net系统必备。系统从新启动后,您须要从新启动安装程序。单击“肯定”从新启动。单击“取消”退出安装程序,之后再安装。”而后我就单击“肯定”从新启动电脑,待系统启动完毕后,从新启动安装程序,结果上述提示再次出现,又是从新启动电脑,然而仍是这样的提示,没法安装。请高手指点。
个人操做系统是WINXP SP2的,请问究竟是什么缘由?
解决办法:在注册表删除HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\pendingfilerenameoperations 而后再装就能够!
项目:常规-》配置类型(.exe .dll .lib 生成文件 实用工具)
项目:system->子系统(windows console)
项目:C/C++-》预处理器-》与处理器定义(预约义一些宏,如:WIN32 _DEBUG _CONSOLE)
启用扩展指令集:
项目:C/C++-》代码生成(启用加强指令集 2003支持SSE SSE2)
2007-6-28
这几天vc2003的编译输出显示的中文都是乱码,搞得我真不爽。原来是上次作的控制台命令程序修改了控制台的代页码936(中文)=》437(西文)。
而且应用到全部的console窗口。
但为何会影响到编译的输出就不得而知了。
2007-9-13
附加××目录
头文件目录: 项目:C/C++ 》常规 》附加包含目录
库文件目录: 项目:连接器 》常规 》附加库目录
设置输出目录:(和工做目录)
项目:配置属性 》连接器 》 导入库 (如:$(OutDir)/cgloverd.lib )
项目:配置属性 》常规 》输出目录 (如..\..\bin)
若是要更改输出exe的名称能够这样:
项目:配置属性 》连接器 》输出文件 (如:..\..\bin/文件名.exe)(即 输出目录/文件名)
这样你能够把全部共享的dll放在..\..\bin中,而后应用程序编译连接后自动放到..\..\bin中以实现共享dll
(另外 若是出现以下错误:没法启动调试.没法启动程序“。。。”,系统找不到指定文件,就是由于未设置输出文件,能够如上添加输出exe)
若是你要应用程序的目录为其所在的目录(即 输出目录),就要设置
项目:配置属性 》调试 》工做目录 (值同于 输出目录(如:..\..\bin));
[好比加载资源,用到文件路径,也是基于工做目录的]
[这个可能在用 打开文件对话框有用,好比你设置 exe输出到..\..\bin,那么默认的工做目录就和 exe所目录不同,那么你设置的 打开对话框的默认路径
在..\..\bin 下的exe 和 你刚编译连接即刻出现的exe 下是不同的 ,因此你设置 工做目录 同 输出目录同样,工做目录设置对 你刚编译连接即刻出现的exe 的工做目录 产生了影响]
============================================================================
2007-10-8
设置pdb文件目录(程序数据库文件)
项目:配置属性 》连接器 》调试 > 生成程序数据库文件(如:$(IntDir)/$(ProjectName).pdb)其中 $(IntDir)为中间目录
============================================================================
2007-10-8
设置lib文件目录(导出库目录)
项目:配置属性 》连接器 》高级 >导入库 (如:lib\cglover.lib)
============================================================================
2007-9-18
DLL,出现warning:“。。。”dll 连接不一致
缘由:项目:配置属性 》C/C++ 》命令行 中的全部选项有指定 /D "CGLOVER_EXPORTS"(这里环境自动指定的导出符号)
#ifdef LOVER_EXPORTS //这里出错 =》CGLOVER_EXPORTS
#define CG_EXPORT __declspec(dllexport)
#else
#define CG_EXPORT __declspec(dllimport)
#endif
2007-9-18
DLL, 出现连接错误:没法打开文件“clock.def”
缘由:这里的错误是clock.def的路径错误,以至找不到。
解决: 项目:配置属性 》连接器 》 输入 》模块定义文件:路径/cglover.def
也能够 项目:配置属性 》连接器 》 命令行 》在附加选项中添加: /DEF: "路径/clock.def"
2007-9-20
使用tinyxml.lib出现了与 一些 Runtime-lib 重定义的连接错误
缘由:我想多是 tinyxml不支持 多线程。
解决:项目:配置属性 》C/C++ 》代码生成运行时库 改成 单线程(/ML).
也能够采用 忽略指定库(这里为多线程的库):
项目:配置属性 》连接器 》输入》忽略指定库 (如:msvcrt.lib(多线程DLL)
2007-9-20
当使用模块定义文件(.def)时,
咱们会在.def中写:( LIBRARY 导出的dll名)
但因为在一个dll中只容许一个.def文件,因此咱们这时没法区别对待 Debug和Release版DLL,由于这是导出的.lib文件中填写的是.def指定的DLL名,
好比(MyD.lib 和 My.lib 中认定的都是.def定义的(My.lib),虽然咱们能导出MyD.dll和My.dll.
解决:将 LIBRARY后面的去掉(有省事 有实惠,干嘛还要写导出dll名呢)
==============================================================================================
2007-9-26
debug时出现连接错误:
libcpd.lib(xdebug.obj) : error LNK2019: 没法解析的外部符号 __malloc_dbg ,该符号在函数 "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (
??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z) 中被引用
libcpd.lib(_tolower.obj) : error LNK2001: 没法解析的外部符号 __malloc_dbg
libcpd.lib(xdebug.obj) : error LNK2019: 没法解析的外部符号 __free_dbg ,该符号在函数 "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (
??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z) 中被引用
并且当使用<fstream>时才出现这个错误
另外使用Release时没错误。
经检查 项目 》 配置属性 》C/C++ 》 代码生成》运行时库 》
发现 Debug时使用的是:单线程(/ML) Release时使用的也是:单线程(/ML)
将Debug的改成:单线程调式(/MLd)
好像是上次发现程序中使用的Tinyxml库不支持 多线程运行库 ,改成 单线程的运行库,但debug的没改成调试版本的
==============================================================================================
2007-9-26
输出dll后可以让你选择测试程序,若要改成不使用,以下:
项目:配置属性 》 调试 》 命令:中的 字符串 就指定了 测试程序 路径名文件名,去掉便可。
==============================================================================================
vc6->vc7的系列问题及解决方法-1 zz2006-07-19 09:57最近因为工做须要,把项目从vc6升级到vc7(vc.net2003)。升级过程遇到些问题,记录于此。
1. 编译时出现:WINVER not defined. Defaulting to 0X0501 (Windows XP and Windows .NET Server)
这个问题是由于没有指定工程要使用的平台SDK的版本。
Minimum system required Macros to define
Windows Server 2003 family _WIN32_WINNT>=0X0502
Windows XP _WIN32_WINNT>=0X0501
Windows 2000 _WIN32_WINNT>=0X0500
Windows NT 4.0 _WIN32_WINNT>=0X0400
Windows Me _WIN32_WINDOWS=0X0490
Windows 98 _WIN32_WINDOWS>=0X0410
Internet Explorer 6.0 _WIN32_IE>=0X0600
Internet Explorer 5.01, 5.5 _WIN32_IE>=0X0501
Internet Explorer 5.0, 5.0a, 5.0b _WIN32_IE>=0X0500
Internet Explorer 4.01 _WIN32_IE>=0X0401
Internet Explorer 4.0 _WIN32_IE>=0X0400
Internet Explorer 3.0, 3.01, 3.02 _WIN32_IE>=0X0300
解决办法:
属性,C/C++,命令行,附加项中添加 /D _WIN32_WINNT=0x0501 (由于我是在xp下工做的因此是0x0501)
2. Link时出现:LINK : warning LNK4075: 忽略”/EDITANDCONTINUE”(因为”/INCREMENTAL:NO”规范)
这个问题是由于在vc6中,工程使用的增量编译。
解决办法:
属性,连接器,常规,启动增量连接 选择 是(INCREMENTAL)
3. 编译时出现:warning C4129: “U” : 不可识别的字符转义序列
error C3847: 通用字符中的错误符号;必须使用十六进制数字
缘由:为开发全球通用的应用程序,.NET Framework 使用 Unicode UTF-16(Unicode 转换格式,16 位编码形式)来表示字符。在某些状况下,.NET Framework 在内部使用 UTF-8。引入通用字符名称的格式是 \u#### 或 \U########。
解决办法:
//#include MAKEPATH(MAIN_IMAGE_PATH, FunUtil\\Unit_star.txt)
#include “..\\ImageData\\ML128160\\FunUtil\\Unit_star.txt”
4. 连接时出现:LIBCMTD.lib(crt0dat.obj) : error LNK2005: _exit 已经在 MSVCRTD.lib(MSVCR71D.dll) 中定义 等相似错误
缘由:
Run-Time Library
?Run-Time Library是编译器提供的标准库,提供一些基本的库函数和系统调用。
咱们通常使用的Run-Time Library是C Run-Time Libraries。固然也有Standard C++ libraries。
CRun-Time Libraries实现ANSI C的标准库。VC安装目录的CRT目录有C Run-Time库的大部分源代码。 CRun-Time Libraries有静态库版本,也有动态连接库版本;有单线程版本,也有多线程版本;还有调试和非调试版本。?动态连接库版本:
/MD Multithreaded DLL 使用导入库MSVCRT.LIB
/MDd Debug Multithreaded DLL 使用导入库MSVCRTD.LIB?静态库版本:
/ML Single-Threaded 使用静态库LIBC.LIB
/MLd Debug Single-Threaded 使用静态库LIBCD.LIB
/MT Multithreaded 使用静态库LIBCMT.LIB
/MTd Debug Multithreaded 使用静态库LIBCMTD.LIB若要使用此运行时库 请忽略这些库
单线程 (libc.lib) libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
多线程 (libcmt.lib) libc.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
使用 DLL 的多线程 (msvcrt.lib) libc.lib、libcmt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
调试单线程 (libcd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcmtd.lib、msvcrtd.lib
调试多线程 (libcmtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、msvcrtd.lib
使用 DLL 的调试多线程 (msvcrtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib
解决方法:
属性,连接器,输入,忽略指定库 libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib (这是我须要忽略的,你能够根据你工程的实际状况选择。)