【发布时间】: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*。 ??只是好奇