MFC与sqlite3之间使用宏转换

10 篇文章 0 订阅

sqlite3 中由于是开源的基于c/c++的库,所以参数为char类型,但由于MFC中,控件变量多为使用Cstring,所以之间会存在字符类型强制转换最常用的方法:

1:sqlite3保持参数为char类型,把MFC中cstring强制转换为char,方法如下:::

int strlen = m_strname.GetLength()+1;
char *name = new char[strlen];
memset(name,0,strlen);
strncpy(name, cstr1, strLength);
wchar_t* tmpname = m_strname.GetBuffer((m_strname.GetLength()));
name = UnicodeToAnsi(tmpname);

然后出现w_chart转为char的错误方法如下:

inline char* UnicodeToAnsi( const wchar_t* szStr )  
{  
int nLen = WideCharToMultiByte( CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL );  
if (nLen == 0)  
{  
return NULL;  
}  
char* pResult = new char[nLen];  
WideCharToMultiByte( CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL );  
return pResult;  
}  

2:在sqlite3中使用宏转换,自己写的函数参数任为cstring,方法如下:

USES_CONVERSION;必须加这个,如果不加会包_lps未定义
 int rc=  sqlite3_prepare_v2(db,W2A_CP(sqlstr,CP_UTF8),strlen(W2A_CP(sqlstr,CP_UTF8)),&stmt,NULL);
/*char *c_name = (LPSTR)(LPCTSTR)name;*/
rc =sqlite3_bind_text(stmt,1,W2A_CP(name,CP_UTF8),strlen(W2A_CP(name,CP_UTF8)),SQLITE_STATIC);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值