描述:
我试着编写dephi可以调用的组件,组件编写完成,发现dephi无法调用,想问一下高手关于atl编程的几个问题:
1. 我编译时是否要选择Win32 Unicode Release Minidependency 这类Unicode 选项
2. 如果用 Unicode 编译我该如何修改下面的代码.
//inStr: 为输入的字符串
//long : 字符串长度
//outstr: 输出的字符串
//jia: true时:outstr = instr + '1'; false时:outstr = instr + '0';
STDMETHODIMP CDesmi::Setmi(VARIANT inStr, long insize, VARIANT *outStr, BOOL jia)
{
CComVariant varNum(inStr);
HRESULT hr = varNum.ChangeType(VT_BSTR);
if(FAILED(hr))
return(DISP_E_TYPEMISMATCH);
char *p = NULL;
int charsize = sizeof(char);
int malcsize = int(charsize*(insize+2));
p = (char *)malloc(malcsize);
memset(p, 0, malcsize);
USES_CONVERSION;
lstrcpy(p,OLE2T(varNum.bstrVal)); //在Unicode下编译出错
if (p==NULL)
return S_FALSE;
if (jia)
p[insize] = '1';
else
p[insize] = '0';
p[insize] = '\0';
CComBSTR outvar(p);
VariantInit(outStr);
outStr->vt = VT_BSTR;
outStr->bstrVal = outvar;
free(p);
return S_OK;
}
解决方案1:
lstrcpy(p,OLE2T(varNum.bstrVal)); //在Unicode下编译出错
把lstrcpy换成_tcscpy.
写成:
_bstr_t str(varNum.bstrVal,true);
char* p = (char*)str;