С дуба рухнул, какой ещё variant?! :D (извиняюсь) (у меня падает, кстати).
Плюс, BITMAPINFO передаётся по значению, а должен по ссылке...
Передача по var и по значению
бинарно несовместимы. Pointer и не-pointer — тоже. В импортируемых функциях важно, чтобы передавались правильные параметры в правильном порядке, причём компилятор этого проверить не сможет.
Правильная сигнатура:
- Код: Выделить всё
function SetDIBitsToDevice(hdc: HDC; XDest, YDest: integer; dwWidth, dwHeight: DWORD; srcX, srcY: integer; uStartScan, cScanLines: UINT; lpvBits: pointer; var lpbmi: BITMAPINFO; fuColorUse: UINT): integer; stdcall; external gdi32;
А вообще эта функция должна быть определена в модуле Windows, объявление было не только неправильным, но и лишним.