You can try it like this:
#include <ddraw.h>
typedef HRESULT (WINAPI * PFNDIRECTDRAWCREATE)(GUID FAR* lpGUID, LPDIRECTDRAW FAR* lplpDD, IUnknown FAR* pUnkOuter);
load() {
HMODULE hDDrawLib = LoadLibrary(TEXT("ddraw.dll"));
if(hDDrawLib == NULL) {
// fail
}
PFNDIRECTDRAWCREATE pDirectDrawCreate = (PFNDIRECTDRAWCREATE)GetProcAddress(hDDrawLib, "DirectDrawCreate");
if(pDirectDrawCreate == NULL) {
// fail
}
LPDIRECTDRAW pDDraw;
HRESULT hResult = pDirectDrawCreate(NULL, &pDDraw, NULL);
if(FAILED(hResult)) {
// fail
}
}
vsync() {
pDDraw->WaitForVerticalBlank(DDWAITVB_BLOCKEND, NULL);
pDDraw->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, NULL);
}
vsync_alternative() {
BOOL vb = TRUE;
while(vb == TRUE)
pDDraw->GetVerticalBlankStatus(&vb);
while(vb == FALSE)
pDDraw->GetVerticalBlankStatus(&vb);
}
release() {
pDDraw->Release();
FreeLibrary(hDDrawLib);
}
loop() {
vsync();
pSwapChain->Present(0, 0);
}