Visual C++ standard edition academic
SDKで組んでいます.

long型の変数 xdim の値を文字列に変えて,
設定用ダイアログボックスの Edit Controll に
入れる事をしたいです.

以下のように組んでいますが上手くいきません.

long xdim = 12;
char *long2char(long num);

LRESULT CALLBACK SetDlgProc(HWND hDlgWnd, UINT msg, .... ) {
switch(msg) {
case WM_INITDIALOG:
SetDlgItemText(hDlgWnd, IDC_EDIT_X, (LPCSTR)long2char(xdim));
break;
...
}

char *long2char(long num) {
char str[256];

sprintf(str, "%ld\n", num);
return str;
}

文字化け?した文字列が Edit Controll に入力されます.
(LPCSTR)"12" とすると,文字列 12 が入力されます.
ltoa 関数なども調べましたが,sprintf の方が良いと書かれていたのでこちらで書いています.
どのように修正したらよろしいでしょうか?よろしくお願いします.