我在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
任何人都可以解决这个问题吗? 帮助我。
由于 散聚
答案 0 :(得分:2)
这是不正确的代码,BSTR已经是指针类型。您需要将指针传递给您的BSTR变量,以便被调用的方法可以分配它。假设只有一个out string
参数的通用代码:
BSTR retval = NULL;
HRESULT hr = CSharpInterface->SomeMethod(&retval);
if (SUCCEEDED(hr)) {
// Use retval
//...
SysFreeString(retval);
}