在用ATL编写dephi调用的COM组件时遇到一些问题。
我试着编写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. 我编译时是否要选择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;
}
...全文
相关推荐
DEPHI7和DEPHI8官方繁体中文手册
DEPHI7和DEPHI8官方繁体中文手册,均为PDF格式
DEPHI BHO源程序
DEPHI BHO源程序 DEPHI BHO源程序 DEPHI BHO源程序
学习DEPHI自己做的截图软件
自己做的截图软件,可以全屏和部分屏截图,除了用了热键管理的第三方控件,其他像气泡等都是用DELPHI自带的控件实现,这是我的学习DELPHI的初始之作,有问题请联系我,QQ:260086501
dephi数据库开发实例
dephi数据库开发实例,清华出版社,实例讲解,是dephi学习的好教程!
dephi编程宝典源码
dephi 编程宝典 配套光盘源码 500个实例源码 实用


