c# - 当 C# 从 C++ 调用函数时,如何编组包含结构作为输入/输出参数的映射?
问题描述
这是c ++中定义的函数:
struct StructDefineInCPlus
{
const wchar_t* Type;
const wchar_t* Value;
const wchar_t* Data;
};
int GetWhatIWant(_Out_ std::map<const wchar_t*, StructDefineInCPlus>& parameter)
{
parameter[key1].Type = L"Type1";
parameter[key1].Value = L"Value1";
parameter[key1].Data = L"Data1";
parameter[key2].Type = L"Type2";
parameter[key2].Value = L"Value2";
parameter[key2].Data = L"Data2";
}
然后我有一个简单的 C++ 包装类,它定义如下:
struct StructDefineInWrapper
{
const wchar_t* Type;
const wchar_t* Value;
const wchar_t* Data;
};
int GetWhatIWantWrapper(_Out_ std::map<const wchar_t*, StructDefineInWrapper>& parameter)
{
return m_object->GetWhatIWant(parameter);
}
我试图将包装器中的结构定义为:
struct StructDefineInWrapper
{
String^ Type;
String^ Value;
String^ Data;
};
但它有错误:a member of non-managed class cannot be a handle.
在 C# 中,我将其定义为:
struct StructDefineInCSharp
{
public String Type;
public String Value;
public String Data;
}
var myMap = new Dictionary<string, StructDefineInCSharp>();
wrapper.GetWhatIWantWrapper(myMap);
但它不断给我错误,例如无法将 c# 定义的映射转换为 C++ 映射。我以前从未研究过 C#,到目前为止,我只知道如何将 wstring 编组为输出参数(使用String^
and StringToHGlobalUni
),但是对于地图中的结构,我找不到任何方法来做到这一点。
解决方案
推荐阅读
- python - 序列搜索期间的正则表达式错误
- excel - 使用单个公式合并到列
- python - Selenium python 如何执行单击切换按钮
- javascript - 502 Bad Gateway 和 503 Service Unavailable - 但不一致
- sql - SQL Server 仅选择字符串的一部分
- python - 这个 for 循环的时间复杂度是多少?
- javascript - 如何为每个唯一用户而不是 localStorage 实现持久化?
- r - 将一个向量与另一个向量的每个元素进行比较
- python - AttributeError:“NoneType”对象在覆盆子的速度监视器中没有属性“组”
- swiftui - 如何在 SwiftUI 中将 Closure 定义为 Button 的操作?