Basicly, I've never used directx before.
I'm basic my code on this one I found online: http://www.codeproject.com/....

As for the IDirect3D9_CreateDevice.

I've removed the comment out from the "hr" in the init and return it. it gets me a something which looks as a fine memory address.

Code:
    device_ptr = IDirect3D9_CreateDevice(d3d9_ptr, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, present_parameters.hDeviceWindow, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &present_parameters, &device_ptr);
    if(!device_ptr)
        LOG("Direct3D_CreateDevice returned:");

	//debug address
	LOG("IDirect3DDevice9_CreateOffscreenPlainSurface returned %08x\n", device_ptr);

    return device_ptr;

but the snap function still fails with access violation

Code:
void Snap()
{
    HRESULT hr;

    static HMODULE d3d9_handle = 0;
    IDirect3DDevice9 *device_ptr;
	IDirect3DSurface9 *present_parameters = 0;

    device_ptr = init_d3d9();
    if (!device_ptr) 
        LOG("NO DEVICE %u", device_ptr);

	// GOOD TILL HERE

	// ----> FAILS HERE <----
        hr = IDirect3DDevice9_CreateOffscreenPlainSurface(device_ptr, 640, 480, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &present_parameters, NULL);

	if (!hr) 
		LOG("IDirect3DDevice9_CreateOffscreenPlainSurface returned %08x\n", hr);
}