在用ATL编写dephi调用的COM组件时遇到一些问题。

luofeitarget 2004-04-06 09:55:33
我试着编写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;

}
...全文
60 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ColderRain 2004-04-09
  • 打赏
  • 举报
回复
char换成TCHAR

p[insize] = '\0'; 改成p[insize] = _T('\0');就是所有字符串都要加上_T()

和字符操作相关的CRT函数都要换成
Generic-Text Routine Name 的函数。
ColderRain 2004-04-09
  • 打赏
  • 举报
回复
lstrcpy(p,OLE2T(varNum.bstrVal)); //在Unicode下编译出错

把lstrcpy换成_tcscpy.
luofeitarget 2004-04-09
  • 打赏
  • 举报
回复
还有人回答没?
wangweixing2000 2004-04-06
  • 打赏
  • 举报
回复
写成:
_bstr_t str(varNum.bstrVal,true);
char* p = (char*)str;

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧