Это работает:
int main( int argc, char *argv[]) { .... gtk_init(&argc, &argv); ....
Но это не так:
int WINAPI WinMain (HINSTANCE p1, HINSTANCE p2, LPSTR argv, int argc) { .... gtk_init(&argc, &argv); ....
Может кто-нибудь указать, что там не так?
WinMain не предоставляет вам argc и argv - см. http://msdn.microsoft.com/en-us/library/ms633559%28VS.85%29.aspx. Вы получаете командную строку в виде одной строки (третий параметр), которую вы должны проанализировать самостоятельно.