vc6: 直接编译 crtdll, 兼容任何项目, 不需要安装VC Runtime库: (不支持64bit)
编译CRTDLL Unicode 项目即可
只需要二个文件: cximagecrtu.lib, cximagecrtu.dll
#pragma comment(lib, "cximagecrtu.lib")
把 cximagecrtu.dll 放入可执行目录
在实际项目中,必须去除“视wchar_t为内置”选项,因为wchar_t在库中为unsigned short
----- 默认工程文件(full_vc10.sln) -----
CRT DLL 动态库(MD), 但用户必须自行安装相应的VC Runtime
用高版本VS编译vc10.sln, 编译CRTDLL即可, 目标项目必须设置为动态链接库(MD)
需要两个文件: cximagecrt.lib, cximagecrt.dll
CXImage静态库(MD), 需要VC Runtime支持
编译CXImage, 再编译CRTDLL(自动编译所有解码器库)
项目依赖 release/debug 下所有的lib, 文件非常大。
依赖库 cximage.lib, jasper.lib, jbig.lib, jpeg.lib, libdcr.lib, libpsd.lib, mng.lib, png.lib, tiff.lib zlib.lib
可用lib.exe进行合并(运行vcvars32.bar, 进入lib目录): lib.exe /out:d:\cximage_all.lib *.lib
CXImage静态库(MT, 非默认), 不需要VC Runtime支持
如果实际项目工程使用LibMT运行库,则需要编译 CXImage静态库(MT)版本:
同MD,将所有项目修改运行库为MT,再按MD的方式编译。
需要调试符号时,所有的项目指定程序数据库名称(PDB): $(OutDir)$(ProjectName).pdb
----------------------------------------------------------
最佳编译方式: (CxImage CRT Dll with LibMT), 兼容任何项目,不需要VC Runtime支持
所有工程项目一律调整运行库为MT, Debug为MTd
编译 cximagecrtdll 项目, 使用最终文件: cximagecrt.lib, cximagecrt.dll 头文件:(cximage/*.h)
另注: 应修改所有字符集为UNICODE
如果VS版本高,提示stdint错误信息,则修改cximage/stdint.h (此文件是兼容vs1010以下版本,高版本已包含)
#pragma once
#include <stdint.h>
64位:
tiff.lib, psd.lib并不支持64位,除了“指针截断”需要处理一下,其它警告可忽略, include目录保持原状
tiff (源代码并无警告,ximage.lib有警告)
# tif_xfile.cpp // ximage源码, 改int为intptr_t
tif->tif_fd = (int)fd; // 此时fd 为void*, thandle_t
改 tiffiop.h
struct tiff{
...
intptr_t tif_fd; // 原为int,改为intptr_t
// (char*)cp 转为 unsigned long 截断, 此时仅判断指针的后2位,无所谓
for (; n && !isAligned(cp, long); n--){}
#define isAligned(p,t) ((((unsigned long)(p)) & (sizeof (t)-1)) == 0)
psd
修改 psd_types.h, libpsd.h
指针截断,下方代码data为内存指针(malloc),强制转换为32位, 存放在一个结构里(psd_layer_record),必然会出错:
layer->layer_info_data[layer->layer_info_count] = (psd_uint)data;
为了懒我把psd_uint 定义 为 intptr_t, 32位不影响,64位为指针长度.
事实应该把psd_layer_record::layer_info_data[] 改为intptr_t, 所有引用此结构的地方都改一下类型(非常多)
编译CxImage 32位+64位
最新推荐文章于 2023-04-21 17:22:58 发布