能力值:
( LV2,RANK:10 )
|
-
-
2 楼
我的代码如下:
char buf[100] = {0};
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_pGdiToken;
HRESULT hr;
Status sta= GenericError;
IStorage *pstgNew = 0;
IStream *pstream = 0;;
IStream *pstream1 = 0;;
HBITMAP *hbitmap;
ULONG dwBytes;
STATSTG statstg;
GdiplusStartup(&m_pGdiToken,&m_gdiplusStartupInput,NULL);
hr = StgOpenStorage(L"Thumbs.db", 0, 0x20, NULL, 0, &pstgNew);
if(S_OK != hr) MessageBox(0,"error",0,0);
IEnumSTATSTG *penum;
pstgNew->EnumElements(0, 0, 0, &penum);
hr = penum->Next( 1, &statstg, 0 );
while (S_OK == hr)
{
if( STGTY_STREAM == statstg.type
&&
L'\005' != statstg.pwcsName[0])
{
MessageBoxW(0, statstg.pwcsName, L"STREAM", 0);
pstgNew->OpenStream(statstg.pwcsName, 0, STGM_READ | STGM_SHARE_EXCLUSIVE, 0, &pstream);
break;
}
else
{
MessageBoxW(0, statstg.pwcsName, L"NO STREAM", 0);
}
hr = penum->Next( 1, &statstg, 0 );
}
if (pstream == 0)
{
MessageBox(0, "pstream 0", 0, 0);
}
_asm int 3
Bitmap bitmap(pstream, TRUE);
sta = bitmap.GetLastStatus();//这里总是2,说明前面的初始化没有成功,是因为参数无效
GdiplusShutdown(m_pGdiToken);
return 0;
}
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
Thumbs.db 是不是结构化存储的?
|
能力值:
( LV7,RANK:100 )
|
-
-
4 楼
STATSTG fileInfo;
ULARGE_INTEGER dwPos;
LARGE_INTEGER lSeek = {0};
lSeek.QuadPart = 12;
pStream->Stat(&fileInfo, 0);
pStream->Seek(lSeek, STREAM_SEEK_SET, &dwPos); // 移动12个字节后才是图像数据
ULONG count;
ULONG size = (ULONG)fileInfo.cbSize.QuadPart-12;
HGLOBAL hBmpData = GlobalAlloc(GMEM_FIXED, size);
pStream->Read((LPBYTE)hBmpData, size, &count);
CreateStreamOnHGlobal(hBmpData, TRUE, &pStream1);
Bitmap bitmap(pStream1);
sta = bitmap.GetLastStatus();
|
能力值:
( LV7,RANK:100 )
|
-
-
5 楼
你的COM对象用完后要Release
|