引っ張ってしまってスマソン。もう少しおつきあいいただければ幸いです。
さらに続けて(if は省略します)

char *buf = GlobalAlloc(GPTR, 256);
lstrcpy(buf, "hoge");
GlobalFree(buf);

○。

お、そゆこと?

と思って元の処理に戻して、先頭で定義してた
char buf[256];
を
char *buf = GlobalAlloc(GPTR, 256);
にしてみますた。

ダメでした。。。ショボン