【问题标题】:Call C# method with string from c++使用 c++ 中的字符串调用 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

标签: c# c++ string


【解决方案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);

【讨论】:

    猜你喜欢
    • 2012-06-22
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多