Du musst keinen Typen zum casten erstellen. Ich find's hässlich und unnötig, da du den sowieso nur einmal brauchst und dann auch ganz normal casten kannst.
Code
orig_connect = ( int ( __stdcall * )( SOCKET, const struct sockaddr*, int ) )DetourCreate( <...and so on...> );
Das einfach mit Inline Assembler zu machen ist eine elegante aber auch gefährliche möglichkeit. Bei mir klappt das nicht immer, weil ich nicht weiß, was mir der Compiler am Ende daraus macht.
Zu deinem Problem:
Hast du schonmal versucht zu debuggen? Die Werte zur Laufzeit ausgegeben?
Ich tippe darauf, dass du das Ergebnis von GetProcAddress noch in einen void* casten musst. Sonst wird das falsch interpretiert meine ich mich zu erinnern.
MfG