我按照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 ++之间传递字符串变量?