2012-10-15 5 views
0

WindowsCodecs.dll의 기능을 사용하고 싶지만 MinGW에는 가져 오기 라이브러리뿐만 아니라 불완전하고 누락 된 WinAPI 헤더가 있습니다. 다음 데모를 고려 gcc test.c -DLOAD_FROM_DEF에 의해 건축하는 경우WICConvertBitmapSource에 연결할 수 없습니다.

#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; 
} 

는, 함수의 프로그램 인쇄 주소가 올바르게 종료됩니다. 하지만, 다음과 같은 데프에서 가져 오기 라이브러리에 링크 할 때 :

LIBRARY WindowsCodecs.dll 
EXPORTS 
    [email protected] 

,이 오류가 튀어 나올 :

The procedure entry point [email protected] could 
not be located in the dynamic link library WindowsCodecs.dll. 

을 놀랍게도, 내가 데프에서 소스에서 WICConvertBitmapSource@12의 선언을 제거하는 경우 파일, 프로그램 링크를 연결하고 잘 실행됩니다.

올바른 가져 오기 라이브러리를 만들려면 어떻게해야합니까?

참고 : Windows 7 SP1에서 MinGW를 실행 중입니다. 내 gcc 버전은 w32api 3.17이 설치된 4.7.0입니다. 이 문제는 GdiAlphaBlend 또는 SHCreateStreamOnFileEx과 같은 많은 기능과 함께 나타납니다.

답변

0

가져 오기 라이브러리는 다음과 같이 --kill-at 플래그를 생성해야했습니다 : http://wyw.dcweb.cn/stdcall.htm

:

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

이 문서는 나를 위해 모든 것을 명확히

관련 문제