【问题标题】:Return a string value from C# to c++将字符串值从 C# 返回到 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*。 ??只是好奇

标签: c# c++ com


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 2020-12-12
    • 2013-12-10
    • 1970-01-01
    • 2021-09-05
    • 2021-12-01
    相关资源
    最近更新 更多