feijidada 2020-06-03 05:25 采纳率: 50%
浏览 230
已采纳

C++ ALT COM组件 返回的BSTR 为何 c# 调用只有一个字节

最近研究 com组件的 调用语言是c#

STDMETHODIMP CStrHelper::ReadMemoryTokey(BSTR PId, BSTR Key, BSTR* strarray)
{
    // TODO: 在此处添加实现代码

  ///Pid转换
    CString a = PId;
    //字符串转整数
    int i = _ttoi(a);
    //字符串转16进制字符串
    string strTemp = dec2hex(i);
    CString strPId =(CString)strTemp.c_str();
    //16进制字符串转DWord
    DWORD DPId = _tcstoul(strPId, NULL, 16);


//key转换
    CString Sttkey = Key;
    int len = (Sttkey.GetLength() / 3) + 1;
    BYTE *Refbyte = new BYTE[len];
    int a5 = strToarray(Key, Refbyte);
    byte* key = strToarray(Key);


    std::string *str = new string();


    BOOL a3 = SearchMemory(DPId, Refbyte, len, str);

    CString refstr(*str->c_str());

    *strarray = refstr.AllocSysString();

COM的值是 {0x0101269c L"521324"}
c# 返回的值是 52

代码 就是这么一个代码 但是 我c#那边 返回到的字符串 只有前2位 实在不知道原因 希望有大佬解下疑惑

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-06-03 10:28
    关注

    C#的代码没有看到不好说
    C#的缓冲区长度怎么设置的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建