2014-11-19 3 views
0

Я использую LibTiff v4.0.3.Исключение исключения TIFFOpenW Libtiff

У меня было это прекрасно работает в многобайтовых, но когда я пытаюсь работать с 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? Нужно ли мне компилировать библиотеку по-разному?
(я проверил и нет никакой проверки для препроцессора переменной UNICODE в LibTIFF ....)

ответ

1

Оказывается, вам нужно скомпилировать библиотеку немного по-другому, связываясь с отладки режима проекта в Unicode.

Перейдите в папку libtiff и откройте nmake.opt для редактирования.
Изменение флагов компиляции использовать отладки CRT DLLs (/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] 

Убедитесь, что ссылки вашего проекта в этот файл, когда вы находитесь в отладке конфигурация