私はから関数を使用するようにしたいのですWindowsCodecs.dll
が、MinGWのは不完全で、WinAPIのヘッダだけでなく、インポートライブラリが欠落しています。次のデモを考えてみます。
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
// ---------- dummy declarations, because MinGW got no wincodec.h ----------
typedef REFGUID REFWICPixelFormatGUID;
typedef VOID IWICBitmapSource;
HRESULT WINAPI WICConvertBitmapSource(
REFWICPixelFormatGUID dstFormat,
IWICBitmapSource *pISrc,
IWICBitmapSource **ppIDst);
// -------------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpLine, int nShow)
{
#ifdef LOAD_FROM_DLL
typedef HRESULT (WINAPI *PWICConvertBitmapSource)(
REFWICPixelFormatGUID, IWICBitmapSource *, IWICBitmapSource **);
HMODULE hDll = LoadLibrary("WindowsCodecs.dll");
PWICConvertBitmapSource pFunc =
(PWICConvertBitmapSource)GetProcAddress(hDll, "WICConvertBitmapSource");
printf("WICConvertBitmapSource: 0x%p.\n", pFunc);
pFunc(NULL, NULL, NULL);
FreeLibrary(hDll);
#else
WICConvertBitmapSource(NULL, NULL, NULL);
#endif
return 0;
}
によってビルドされるgcc test.c -DLOAD_FROM_DEF
と、プログラムは関数のアドレスを出力し、正しく終了します。ただし、次のdefからのインポートライブラリに対してリンクされている場合:
LIBRARY WindowsCodecs.dll
EXPORTS
WICConvertBitmapSource@12
、このエラーが表示されます:
The procedure entry point WICConvertBitmapSource@12 could
not be located in the dynamic link library WindowsCodecs.dll.
驚いたことに、私はの宣言を削除する場合はWICConvertBitmapSource
、ソースからと@12
、DEFファイルからプログラムのリンクと実行の罰金を。
正しいインポートライブラリを作成するにはどうすればよいですか?
注:私はWindows7SP1でMinGWを実行しています。私のgccバージョンは4.7.0で、w32api3.17がインストールされています。この問題は、、、などの多くの関数で発生しGdiAlphaBlend
ますSHCreateStreamOnFileEx
。