@Cory: correct.

Fixed Code:

HWND hWnd = /* from somewhere */;
int nLen = GetWindowTextLength(hWnd) + 1;
WCHAR* lpszText = (WCHAR*)malloc(nLen*sizeof(WCHAR));
// std::wstring str; str.resize(nLen);
nLen = GetWindowText(hWnd,lpszText,nLen);
// str.resize(nLen=GetWindowText(hWnd,&str[0],nLen));
sqlite3_bind_text16(stmt,1,lpszText,nLen*sizeof(WCHAR),SQLITE_TRANSIENT);
//  (.., str.data(),nLen*sizeof(std::wstring::value_type),SQLITE_TRANSIENT);
free(lpszText); // not needed for std::wstring

When you first time create the database, use sqlite3_open() to store
the data as utf8. I believe bind_text16() will convert from utf16 to
utf8 for you.

See:
- GetWindowTextLength() http://msdn.microsoft.com/en-us/library/ms633521.aspx
- GetWindowText() http://msdn.microsoft.com/en-us/library/ms633520.aspx
- sqlite3_bind_text16() http://www.sqlite.org/c3ref/bind_blob.html

Note:
- You need your project to be compiled in UNICODE

On Fri, Dec 17, 2010 at 12:24 AM, Cory Nelson <phro...@gmail.com> wrote:
>
> Just a quick note -- TCHAR is not always UTF-16, and
> sqlite3_bind_text16 takes a void* so it will happily take whatever you
> give it.  You should be using wchar_t directly instead of TCHAR, so an
> error can be caught when you use GetWindowText.
>
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to