获取C#out字符串参数值到C ++ BSTR *?

时间:2014-07-01 10:30:11

标签: c++ casting unmanaged managed firebreath

我在C#DLL中有一个方法,它有一个输入和两个输出参数。所有这三个都是String。

我想从firebreath C ++中调用该函数。我如何从C ++传递BSTR *值?我如何从C#中获取该值?

我已经尝试过使用

BSTR* userKey =NULL;
*userKey = ::SysAllocString(L"Hello Managed World");

但它不起作用。

C#功能:

public void GetPublicKeyforEncryption(String ToUserEmailAddress, out String userKey , out String mySharedKey)

C ++调用函数:

std::wstring& ToUserEmailaddress;
BYTE **bEncryptData = NULL;
BSTR bsData = SysAllocStringLen(ToUserEmailaddress.data(), ToUserEmailaddress.size());
BSTR* userKey =NULL;
BSTR* mySharedKey =NULL;
CSharpInterface->GetPublicKeyforEncryption(bsData,userKey ,mySharedKey );

在上面的c ++ GetPublicKeyforEncryption中正确传递了bsData值,我将如何分配内存并传递

   userKey ,mySharedKey in the BSTR* type

任何人都可以解决这个问题吗? 帮助我。

由于 散聚

1 个答案:

答案 0 :(得分:2)

这是不正确的代码,BSTR已经是指针类型。您需要将指针传递给您的BSTR变量,以便被调用的方法可以分配它。假设只有一个out string参数的通用代码:

BSTR retval = NULL;
HRESULT hr = CSharpInterface->SomeMethod(&retval);
if (SUCCEEDED(hr)) {
    // Use retval
    //...
    SysFreeString(retval);
}