c++ - Libtiff 的 TIFFOpenW 抛出异常

标签 c++ windows unicode libtiff

我正在使用 LibTiff v4.0.3。

我让它在多字节中工作得很好,但是当我尝试使用 Unicode 时,我遇到了运行时异常。

我可以将问题简化为一行:

#include "tiffio.h"

int _tmain(int argc, _TCHAR* argv[])

{  
    TIFF* tif = TIFFOpenW(L"D:\\Myfile", "r");
}

这将完美地工作:TIFF* tif = TIFFOpen("D:\\Myfile", "r");

我无法得到确切的异常代码,但是代码栈看起来是这样的:

msvcr110.dll!__crt_debugger_hook(int _Reserved) Line 60 C
msvcr110.dll!_call_reportfault(int nDbgHookCode, unsigned long dwExceptionCode, unsigned long dwExceptionFlags) Line 155    C++
msvcr110.dll!_invoke_watson(const wchar_t * pszExpression, const wchar_t * pszFunction, const wchar_t * pszFile, unsigned int nLine, unsigned __int64 pReserved) Line 139   C++
msvcr110.dll!_invalid_parameter(const wchar_t * pszExpression, const wchar_t * pszFunction, const wchar_t * pszFile, unsigned int nLine, unsigned __int64 pReserved) Line 85    C++
msvcr110.dll!_invalid_parameter_noinfo() Line 97    C++
msvcr110.dll!_read(int fh, void * buf, unsigned int cnt) Line 84    C
ConsoleApplication1.exe!TIFFFdOpen()    C
ConsoleApplication1.exe!TIFFClientOpen()    C
ConsoleApplication1.exe!TIFFFdOpen()    C
ConsoleApplication1.exe!TIFFOpenW() C
ConsoleApplication1.exe!wmain(int argc, wchar_t * * argv) Line 21   C++
ConsoleApplication1.exe!__tmainCRTStartup() Line 533    C
ConsoleApplication1.exe!wmainCRTStartup() Line 377  C
kernel32.dll!BaseThreadInitThunk()  Unknown
ntdll.dll!RtlUserThreadStart()  Unknown

我试过使用 @err@err,hr ,但它们表明没有错误。

如何让 Unicode 版本工作?我需要以不同的方式编译库吗?
(我已经检查过,但没有检查 libtiff 中的预处理器变量 UNICODE....)

最佳答案

事实证明,当链接到 Unicode 中的调试 模式项目时,您需要稍微不同地编译库。

转到您的 libtiff 文件夹,然后打开 nmake.opt 进行编辑。
更改编译标志以使用调试 CRT dll (/MDd):

OPTFLAGS =  /Ox /MDd /EHsc /W3 /D_CRT_SECURE_NO_DEPRECATE

不仅仅是/MD

现在重建图书馆。

"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\vcvars32.bat"  x86
nmake /f makefile.vc   [clean]

或者对于 x64:

"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\amd64\vcvars64.bat"  amd64
  nmake /f makefile.vc   [clean]

当您处于调试配置时,请确保您的项目链接到该文件

关于c++ - Libtiff 的 TIFFOpenW 抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27021569/

相关文章:

c++ - 闪烁(后台缓冲区?)

c++ - 在 Eclipse 上启用 C++17 以使用 `std::byte`

windows - 环境变量存储在 Windows 注册表中的什么位置?

python - 混合语言单词的词尾正则表达式(在 python2 中)

c++ - segmentation fault,可能原因: function pointer, 多线程,STL map等

c++ - 在 C/C++ 中传递二维数组时出错

linux - Linux Shell 中的 `{} +` 在 Windows 中相当于什么?

c++ - 在QT中读取窗口的注册表

BMP 之外的 JavaScript 字符串

python - UnicodeEncodeError : 'utf-8' codec can't encode characters in position 0-15: surrogates not allowed