最近在看xlnt库,我在控制平台使用有效,但是早MFC中就会报错,很多类名未定义,编译不过,请问有解决方法吗?
你好,是MFC DLL平台,依赖项目录都有添加,但是提示如下图,找不到对应成员;编译出错见附图;
补充代码(无需积分下载):https://download.csdn.net/download/duaiziwodexiuluo/15074387
百度云链接:https://pan.baidu.com/s/13Q2BT-cxgHjbWVo3D1zHCw 提取码:1111
楼上Visual Studio 可以用Cmake 再下一个Cmake编译工具......
显而易见的。他在命令行程序中是好的
后来发现 dll工程文件
最后定位在
这两行代码需要重写...
/// <summary>
/// constexpr max
/// </summary>
template <typename NumberL, typename NumberR>
constexpr typename std::common_type<NumberL, NumberR>::type (max)(NumberL lval, NumberR rval)
{
return (lval < rval) ? (lval) : (rval);
}
/// <summary>
/// constexpr min
/// </summary>
template <typename NumberL, typename NumberR>
constexpr typename std::common_type<NumberL, NumberR>::type(min)(NumberL lval, NumberR rval)
{
return (lval < rval) ? (lval) : (rval);
}
改完之后运行成功. 我会将建议提交给开源作者..
结束了罪恶的一生...
https://github.com/tfussell/xlnt/issues/545
完全无问题
有问题发出来
报什么错?
链接器--》输入--》附加依赖项,加入:$(SolutionDir)lib\xlntd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
右击属性--》配置属性--》VC++目录--》包含目录
#include "stdafx.h" #include #include
我吐了 你扔github数据仓库里 我也能看看
大概率是没环境搞对
没有百度云
需要下载码
msdn需要提取码
1.1 xlnt的获取
这里采用从库里下载xlnt的方式,首先,参考“Windows10下安装Git” 先在windows 10 下安装好Git,或者直接网页下载:https://github.com/tfussell/xlnt
2.2 CMake的安装
到 cmake官网,根据自己的Windows 平台下载相应的版本(32位和64位),具体安装步骤可以参考
3. xlnt库的编译
1). 下载好后解压到自己的工程目录,这里以“E:\MyProject2019“为例,解压后的文件默认在”xlnt-master”文件夹,在该文件夹下创建build用于存放编译生成的库文件(也可以根据自己的使用习惯存放到其它地方),cd xlnt-master; md build
2)选择源码所在的目录和目标输出目录后,点击Configure,在弹出的对话框中选择编译环境,此处自动识别为系统安装的Visual Studio 16 2019,也可根据实际情况选择其他环境。在目标平台中要注意默认的是x64,这里我需要的是编写好程序后拷到U盘在其他的电脑上运行,而目标平台有32位和64位的,且不确定,因此,为了兼容性,这里不采用默认平台,而是选择通用性更强的Win32.
3) 点击Finish后,结果如下,同上述原因,由于运行的最终程序目标环境未知,因此这里选择静态连接。(如果同时取消TESTS发现编译速度加快很多),xlnt项目调试阶段,由于采用的是动态链接,因此这里也要取消“STATIC_CRT", 否则程序运行出错。
4)点击“Generate” 后如下结果:
5) 点击"Open Project" 自动调用Visual Studio 2019 打开相应的工程。由于项目需要经常在Debug和Release之间切换,为了减少对xlnt应用项目配置的变化,此处对xlnt输出的库文件做个变动,即都输出到Library,默认是Debug和Release输出到同名的目录。此处可以选择xlnt 项目,然后右键选择属性,其他的可以用默认。
上述修改只是改变了DLL的默认输出路径,lib的默认输出路径没有改变,
a. dll 输出目录设置
工程点击右键–>配置属性–>常规–>输出目录
b.lib文件输出设置
工程点击右键–>配置属性–>连接器–>高级->导入库
引入lib
在Visual Studio 2019 中选择Build->Build ALL_BUILD编译生成库文件,等项目生成完成
4. VC++ 使用xlnt读写Excel
至此,在 xlnt-master\build\source\Library中生成了库文件,xlntd.dll xlntd.lib(如果是Release版本,则在 对应的Release文件夹,这里是假设已按前述步骤改了默认输出位置和名称),这两个文件是在后面的项目中要用到的文件,以及头文件,在xlnt-master\include中。
4.1 Visual Studio 2019 项目中引入xlnt库
1)配置头文件路径:在项目中右键选择属性,然后在“Configuration Properties-->VC++ Directories->Include Directories”中添加xlnt 头文件所在的位置,如下图所示:
2) 配置第三方库路径:以同样的方式修改Library Directories添加“E:\MyProject2019\xlnt-master\build\source\Library”
3) 库的引用配置:类似上述操作, Configuration Properties-->Linker-->Input-->Additional Dependencies, 填入xlnt.lib(注意,此处默认也是生成不同的文件名,Debug模式生成的文件是xlntd.lib, Release模式生成的是xlnt.lib,为了配置的简单,这里在前面生成xlnt时做了改变,统一生成xlnt.lib)。
至此,Visual Studio 2019 通过xlnt访问excel 的环境就配置好了,接下来参考xlnt相关文档就可以写代码了。需要强调的是,如果是静态链接xlnt库,则需要预处理定义:XLNT_STATIC=1,如果项目开启了预编译的话,则可在 stdafx.h 中 加入” #define XLNT_STATIC 1“,或者在项目属性-> c/c++->命令行 添加: /D "XLNT_STATIC=1"