返回c#到c++的字符串值

本文关键字:字符串 c++ 返回 | 更新日期: 2023-09-27 18:19:08

如何将字符串从c#传递到COM c++ ?我已经为int做过了,它工作得很好

我的COM c++代码的int返回类型:

void ServiceAdapter::GetErrorCode1234()
{
long x;
m_server->GetErrorCodeOnLoginFailure(&x);
//So I get my return code value in x;
}

int返回类型的c#代码:所以我在c#中这样调用:

int GetErrorCodeOnLoginFailure()
{
 return 3 //some return code
}

但是如果我对String return做同样的操作,代码在运行时就会崩溃。

我的COM c++代码字符串返回类型:

BSTR ServiceAdapter::GetVersion1234()
{
BSTR x = :SysAllocString(CCTIUtils:stringToBSTR(L""));
m_server->GetAdapterVersion(&x); // The code is crashing here.
return x;
}

字符串返回类型的c#代码:

string GetAdapterVersion(){返回"6.4.23";}

有什么问题吗?

返回c#到c++的字符串值

这个例子对你有用吗?如果不是苏尼尔…那么我不知道该如何协商这个问题

您需要通过引用传递字符串,以便c#代码获得更新的字符串:

int GetString(String^% ValueData)

或者更好:

String^ GetString() 
{
    char buffer[666];  // Hmya, what to pick?
    unmanagedGetString(buffer);
    return System::Runtime::InteropServices::Marshal::PtrToStringAnsi((IntPtr)buffer);
}