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

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#的缓冲区长度怎么设置的。

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

报告相同问题?