Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在传递给c+中的函数时混淆了参数值+;_C++ - Fatal编程技术网

C++ 在传递给c+中的函数时混淆了参数值+;

C++ 在传递给c+中的函数时混淆了参数值+;,c++,C++,我有以下代码: BSTR xmlst1=SysAllocString(L"*****"); BSTR xmlst2=SysAllocString(L"*****"); MakeXML(CMD_CMD,CMD_AUTHENTICATE,&xmlst1); //should be xmlst1=<CMD>Authen</CMD> MakeXML(XPassword,Password,(&xmlst2)); //should be xmlst2=

我有以下代码:

 BSTR xmlst1=SysAllocString(L"*****");
 BSTR xmlst2=SysAllocString(L"*****");

  MakeXML(CMD_CMD,CMD_AUTHENTICATE,&xmlst1);
//should be xmlst1=<CMD>Authen</CMD>

  MakeXML(XPassword,Password,(&xmlst2));
//should be xmlst2=<Pass>1234</Pass>
BSTR xmlst1=SysAllocString(L“****”);
BSTR xmlst2=SysAllocString(L“****”);
MakeXML(CMD\u CMD、CMD\u AUTHENTICATE和xmlst1);
//应该是xmlst1=Authen
MakeXML(XPassword、密码、(&xmlst2));
//应为xmlst2=1234
当我使用showmessage检查结果时:

ShowMessage(xmlst1);//this is the result <Pass>1234</Pass>
ShowMessage(xmlst2);// strange character.  
ShowMessage(xmlst1)//这是结果1234
ShowMessage(xmlst2);//奇怪的性格。
xmlst2的值以xmlst1为单位。但是为什么呢?
为什么xmlst2的值是一个奇怪的字符

更新:

STDMETHODIMP TVinaImpl::MakeXML(BSTR XMLCodec, BSTR XMLVal, BSTR* res)
{
  try
  {
  wcscpy(*res,L"<");wcscat(*res,XMLCodec); wcscat (*res,L">");
  wcscat(*res,XMLVal);
  wcscat(*res,L"</");wcscat(*res,XMLCodec); wcscat (*res,L">");
  }
  catch(Exception &e)
  {
    return Error(e.Message.c_str(), IID_IVina);
  }
  return S_OK;
}
STDMETHODIMP tvinimpl::MakeXML(BSTR XMLCodec、BSTR XMLVal、BSTR*res)
{
尝试
{
wcscpy(*res,L“”);
wcscat(*res,XMLVal);
wcscat(*res,L“);
}
捕获(例外和e)
{
返回错误(e.Message.c_str(),IID_IVina);
}
返回S_OK;
}

A
BSTR
是一头讨厌的野兽。它本质上是一个带有隐藏前缀的unicode字符串,该前缀产生字符串长度。您的错误基本上在
*res=wcs1。不能以这种方式分配BSTR。进一步
删除[]wcs1也不会有好的结局。不要尝试删除具有自动存储持续时间的变量

最好使用
\u bstr\t
类型,该类型包含用于赋值的重载运算符和用于复制的特定函数。否则使用“较重的”
CComBSTR
。看


如果您无法使用这些函数,那么您始终可以直接访问字符串API:请参阅,您正在传递的是地址,而不是ny引用。除非您告诉我们什么是
MakeXML
,以及您传递给它的变量的值,否则无法回答此问题。您正在对局部变量使用
delete[]
。那太糟糕了。只有
delete
您的
new
。通过执行
*res=wcs1
操作,您实际上返回了局部变量的地址。函数一返回,指针就失效了。因此我应该在c++中将
wchar\u t
更改为
BSTR
,builer不知道哪个仍然错误。如果不能使用
\u bstr\t
,则直接使用api。我已经添加了到answser的链接。