将字符串值从 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++的主要内容,如果未能解决你的问题,请参考以下文章

将字符串值从一个应用程序返回到另一个应用程序 C#

如何使用 PInvoke 将 std::wstring 从 C++ 返回到 C# 而无需编写字符串缓冲区转换 [重复]

将构造函数值从子类传递到超类c++ [重复]

在不同的返回类型上将字符串从 C# 传递到 C++ DLL 不同的文本编码

使用 SSE 将浮点值从 Assembler DLL 返回到 C++

如何安全地将字符串引用从 c# 传递到 c++?