libpng.dllを動的にロードする場合、libpng13.dllからバージョン1.5にアップグレードした後、コンパイラーはこの未解決の外部の報告を開始しました:png_set_longjmp_fn
どうして、どうすれば修正できますか?
libpng.dllを動的にロードする場合、libpng13.dllからバージョン1.5にアップグレードした後、コンパイラーはこの未解決の外部の報告を開始しました:png_set_longjmp_fn
どうして、どうすれば修正できますか?
ライブラリは、内部構造をより適切に非表示にするように変更されました。だからあなたがする必要があるのはこれです:
typedef jmp_buf* (*png_set_longjmp_fnPtr)(png_structp png_ptr, png_longjmp_ptr longjmp_fn, size_t jmp_buf_size);
png_set_longjmp_fnPtr mypng_set_longjmp_fnPtr = 0;
次に、LoadLibraryを動的に実行する場合は、次のようにします。
mypng_set_longjmp_fnPtr = (png_set_longjmp_fnPtr) GetProcAddress(hpngdll, "png_set_longjmp_fn");
extern "C"
{
jmp_buf* png_set_longjmp_fn(png_structp png_ptr, png_longjmp_ptr longjmp_fn, size_t jmp_buf_size)
{
if (mypng_set_longjmp_fnPtr)
{
return (*mypng_set_longjmp_fnPtr)(png_ptr, longjmp_fn, jmp_buf_size);
}
return 0;
}
}
未解決の外部を引き起こす次のコードは、再び正常に機能するようになりました。
if (setjmp(png_jmpbuf(png_ptr)))
{
他の場所が見つからなかったので、ここに投稿しました。私は問題をグーグルで検索し、同じ問題に遭遇しているが解決策がない他の人々を見つけたので、彼らは再び古いバージョンのlibpngにダウングレードしました。だからここに投稿しようと思いました。
もう 1 つの解決策は、libpng を動的にロードするのではなく、静的にリンクすることです。この場合、追加のメソッドは必要ありません。しかし、それにはライブラリが必要であり、必要なときだけではなく、常に libpng がロードされます。