c# - 如何将字符串参数从 C++ com 传递给 C#?

标签 c# c++ com

我的 C++ 代码有这样一个参数:

STDMETHODIMP TVinaImpl::test(BSTR Param1)
{
  try
  {
      Param1=(L"test1");
  }
  catch(Exception &e)
  {
    return Error(e.Message.c_str(), IID_IVina);
  }
  return S_OK;
}  

我使用 C++ 生成器:
enter image description here
当我在 c# 中调用此 com dll 函数时,它显示错误:

IntPtr a = new IntPtr();
vina.test(a);

为null,没有获取到值。
如何将变量从 C# 传递到 C++ com 并将其传回?

最佳答案

由于 Param1 被声明为 [in, out] 参数,您需要将其声明为指向 BSTR 的指针:STDMETHODIMP TVinaImpl::test (BSTR* 参数 1)

此外,您不能简单地将字符串文字分配给 BSTR。正确的方法是使用 SysAllocString 分配内存:*Param1 = SysAllocString(L"test1");

关于c# - 如何将字符串参数从 C++ com 传递给 C#?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39545171/

相关文章:

c# - 从一个 Controller 调用方法到另一个 Controller 时 session 为空...MVC

c# - 需要交换具体类时的依赖注入(inject) C#

c++ - 我的粒子群优化代码在 C++ 和 MATLAB 中生成了不同的答案

linux - 通过 Wine 在 Linux 上运行基于 COM/DCOM 的应用程序

c# - VBA 和 "Class doesn' t 支持自动化或不支持预期的界面”

c# - 强制构建因某些条件而失败

c# - 更新面板的性质

c# - 使 .Net 3.5 应用程序与 .Net 4.0 应用程序对话的最稳定方式

C++ 11 std::enable_if 在 Visual C++ 2013 中重载

c# - 在屏幕外(或隐藏)渲染网络浏览器控件