将字符串值从 C# 返回到 c++
Posted
技术标签:
【中文标题】将字符串值从 C# 返回到 c++【英文标题】:Return a string value from C# to c++ 【发布时间】:2011-12-30 05:26:52 【问题描述】:如何将字符串从 C# 传递到 COM C++ ?我已经为 int 做了,它工作正常。
我的 int 返回类型的 COM C++ 代码:
void ServiceAdapter::GetErrorCode1234()
long x;
m_server->GetErrorCodeOnLoginFailure(&x);
//So I get my return code value in x;
我的 int 返回类型的 C# 代码: 所以从 C# iam 调用是这样的:
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# 代码:
字符串 GetAdapterVersion() return "6.4.23";
有什么问题?
【问题讨论】:
您对 GetAdapterVersion 的调用会返回一个字符串,而不是将其作为参考参数。你确定这个电话是对的吗? 是的。这就是它的工作原理。它对 int 工作正常 std::wstring ServiceAdapter::GetVersion1234(),为什么是 std::wstring?应该是BSTR吧? 我改为 BSTR ..但它仍然无法正常工作。我认为,问题与向 x 分配内存有关 问题是否必须使用 wchar_t* 并将其转换为 dll 内的 char*。 ??只是好奇 【参考方案1】:这个例子对你有用吗..?如果不是Sunil..那么我不知道如何就这个问题进行咨询
您需要通过引用传递字符串,以便 C# 代码获取更新的字符串:
int GetString(String^% ValueData)
或者更好:
String^ GetString()
char buffer[666]; // Hmya, what to pick?
unmanagedGetString(buffer);
return System::Runtime::InteropServices::Marshal::PtrToStringAnsi((IntPtr)buffer);
【讨论】:
以上是关于将字符串值从 C# 返回到 c++的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PInvoke 将 std::wstring 从 C++ 返回到 C# 而无需编写字符串缓冲区转换 [重复]
在不同的返回类型上将字符串从 C# 传递到 C++ DLL 不同的文本编码