www.pudn.com > 播放mp3的控件.rar > helper.cpp
#include#include #include #include "helper.h" __inline LPTSTR DeleteString(LPTSTR s) { if (s) { free (s); } return NULL; } LPTSTR xstrdup(const LPTSTR s) { if (!s) return NULL; LPTSTR e; int l = _tcsclen(s); e = (LPTSTR) malloc (l+sizeof (TCHAR)); _tcscpy(e, s); return e; } LPTSTR xstrdupe(const LPTSTR s) { if (!s) return NULL; LPTSTR e; int l = _tcsclen(s); e = (LPTSTR) malloc (l+sizeof (TCHAR)); if (!e) throw 1; _tcscpy(e, s); return e; } LPVOID encode_strlist(LPTSTR *strlist, DWORD *enc_len) { LPTSTR buf, tmp_buf, cur_str; int i, j; i = 0; j = 0; cur_str = (LPTSTR) strlist[j]; // define total length while (cur_str != NULL) { i += _tcslen(cur_str) + sizeof TCHAR; cur_str = strlist[++j]; } i+= sizeof TCHAR; // copy strings to buffer *enc_len = i; buf = (LPTSTR) malloc(i); tmp_buf = buf; j = 0; cur_str = (LPTSTR) strlist[j]; // define total length while (cur_str != NULL) { _tcscpy(tmp_buf, cur_str); tmp_buf += _tcslen(cur_str) + sizeof TCHAR; cur_str = strlist[++j]; } *tmp_buf = (TCHAR) 0; return buf; } LPTSTR *decode_strlist(LPVOID str) { LPTSTR cur_str; LPTSTR *buf; int i, j; j = 0; cur_str = (LPTSTR) str; while (*cur_str != (TCHAR) 0) { j++; cur_str += _tcslen(cur_str) + sizeof TCHAR; } j++; buf = (LPTSTR *) malloc(j * sizeof LPVOID); i = 0; cur_str = (LPTSTR) str; while (i < j) { *buf = xstrdup(cur_str); buf += sizeof(LPTSTR); cur_str += _tcslen(cur_str) + sizeof TCHAR; } *buf = NULL; return buf; }