0

私はから関数を使用するようにしたいのです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

4

1 に答える 1

0

インポートライブラリは--kill-at、次のようにフラグを付けて作成する必要があります。

dlltool --kill-at -D WindowsCodecs.dll -d WindowsCodecs.def -l libwindowscodecs.a

この記事は私のためにすべてを明らかにしました:http ://wyw.dcweb.cn/stdcall.htm

于 2012-10-15T14:24:12.157 に答える