使用 c++ 中的字符串调用 C# 方法
Posted
技术标签:
【中文标题】使用 c++ 中的字符串调用 C# 方法【英文标题】:Call C# method with string from c++ 【发布时间】:2016-12-23 10:09:30 【问题描述】:我知道以前有人问过类似的问题,但我就是无法让它发挥作用.. 我在 dll 中有一个 c# 函数。
public int setUser(string str)
我从 C++ 调用它。 我尝试过这样的事情。
long lResult = 0;
PWSTR pw = L"hello";
pICalc->setUser(pw, &lResult);
但这似乎只是发送一个空字符串或一个空值。
调用该方法并发送该方法将获得的字符串的最简单方法是什么?
【问题讨论】:
你怎么称呼这个方法?你在使用 C++/CLI 吗?还是 COM? 你好我用COM 那么到底发生了什么?你在 C# 中得到null
吗?还是一个空字符串?如果不管输入如何都返回 42 会发生什么,这是否会导致返回 C++?你的 COM 接口是什么样子的?在 C# 和 C++ 中?
它是一个空字符串。是的,我可以毫无问题地在它们之间传递整数。只是字符串,我不明白如何开始工作。
关于界面我不太确定,我用这个教程让它工作:support.microsoft.com/en-us/kb/828736
【参考方案1】:
在 COM 中,字符串被封送为 BSTR,这与以 null 结尾的 C++ 字符串不同。在 C++ 中创建 BSTR 的最简单方法是使用 ATL 的 CComBSTR 类:
pICalc->setUser(CComBSTR(L"hello"), &lResult);
否则您可以使用 SysAllocString/SysFreeString 函数:
BSTR bstrString = ::SysAllocString(L"hello");
if (bstrString == NULL)
// out of memory
pICalc->setUser(bstrString, &lResult);
::SysFreeString(bstrString);
【讨论】:
以上是关于使用 c++ 中的字符串调用 C# 方法的主要内容,如果未能解决你的问题,请参考以下文章
从 C++ 传递函数指针以由 C# 调用 - 函数参数包括宽字符字符串 (LPCWSTR)