Win GDI функция CreateDIBDC не работает должным образом для платформы x64 - PullRequest
0 голосов
/ 08 марта 2011

У меня есть статический код win32 dll, который должен быть перенесен на платформу x64. Есть много функций, использующих функции Windows GDI, такие как CreateDIBDC, CreatePen и т. Д ....

Проблема в том, что при обработке функций DLL на x86 я никогда не сталкивался с какими-либо проблемами при использовании API-интерфейсов Windows. Но при переносе кода на x64 Windows API создает проблемы ....

Функции библиотеки DLL в основном связаны с обработкой изображений на растровых изображениях. таким образом, используя bitmapinfoheader, bitmap и т. д. структуры окон ...

Пожалуйста, помогите, поскольку это срочно.

------- дополнение

WindowVar = GetActiveWindow();
DisplayDeviceContext = GetDC(WindowVar);
BitmapVar = CreateDIBSection (DisplayDeviceContext, BITMAPINFOheaderstructure,
    COLORmap, &lpvBits, 0, 0L);
//copy data to the BitmapVar from image
byteswritten = GetObject(BitmapVar, sizeof(DIBSECTION), &DibSectionvar);

но основная проблема заключается в том, что при работе на x86 функция GetObject GetObject выдает байты, записанные как 84, что правильно, но на x64 это дает только 32. однако это должно быть 92 ...

Ответы [ 2 ]

1 голос
/ 29 марта 2011

Я все равно получил ответ.Это была странная проблема.Размер структуры DIBSECTION не был правильным.наконец, я взял sizeof (DIBSECTION) для переменной и передал ее в качестве входных данных функциине знаю почему, но это решило проблему.

0 голосов
/ 22 января 2015

Для чего бы это ни стоило, у меня была такая же проблема с x64.

Размеры, возвращаемые следующими вызовами, отличаются, test = 28, test2 = 32.

Необходимо округлитьразмер до границы 4 байта.Кажется, не имеет значения с 32-битной, но имеет значение с x64

int test = sizeof(BITMAP);
int test2 = GetObject(hExportBitmap, sizeof(BITMAP), NULL);
...