suppose C::StaticFunc is located at say 0x0000001

why doesn't the following call the function?

jmp 0xe9, 0x0000001

what does ((int)this + sizeof(Thunk)) have to do with calculating the address of where to jump?

unless ofcourse the jmp operand requires a relative address (relative to the program), while &C::StaticFun returns the global address (in memory). But then would that mean that if I defined another class before C, would I then have to use the following to calculate the relative address:

(int)this + sizeof(Thunk) + sizeof(newClass)

for doublehook: This is commonly used in ATL to associate a call back function with it's appropriate hwnd.