将字符串从C ++传递到C#(反之亦然)

时间:2015-07-26 23:23:19

标签: c# c++ com unmanaged managed

我按照How to call a managed DLL from native Visual C++ code in Visual Studio.NET or in Visual Studio 2005中的示例从本机C ++代码调用.NET DLL。 C#的代码如下所示:

public class StringExample: IStringExample
{
    public string returnString(string input)
    {   
        return input;
    }
}

我按照示例的步骤构建,注册COM程序集,并从C#代码中导出类型库(.tlb)。

在C ++代码中,我尝试使用类似于以下内容的代码:

#import "..\StringExample\bin\Debug\StringExample.tlb" raw_interfaces_only
using namespace StringExample;

void abc()
{
  // Initialize COM.
  HRESULT hr = CoInitialize(NULL);

  // Create the interface pointer.
  IStringExample ptr(__uuidof(StringExample));

  BSTR bstrInput = L"hello world";
  BSTR bstrOutput =L"";

  ptr->returnString(bstrInput, &bstrOutput);

  TCHAR* szOutput = (TCHAR *)_bstr_t(bstrOutput);

  // Uninitialize COM.
  CoUninitialize();
}

但是,bstrOutput为空。此外,我需要将bstrOutput转换为TCHAR *以将其传递给不同的api。

变量初始化是否有错误?是否有不同的方法在.NET和C ++之间传递字符串变量?

0 个答案:

没有答案