【问题标题】:C# bindings for a c++ libraryC++ 库的 C# 绑定
【发布时间】:2017-09-10 20:47:50
【问题描述】:

我已经为 libpostal 库 (link to LibPostalNet) 创建了一个 c# 绑定。

我使用 CppSharp 创建绑定。它有效,但我不知道如何转换此代码:

typedef struct libpostal_address_parser_response
{
    size_t num_components;
    char** components;
    char** labels;
}
libpostal_address_parser_response_t;

CppSharp 以这种方式转换代码:

public sbyte** Components
{
    get
    {
        return (sbyte**)((global::LibPostalNet.LibpostalAddressParserResponse.__Internal*)__Instance)->components;
    }

    set
    {
        ((global::LibPostalNet.LibpostalAddressParserResponse.__Internal*)__Instance)->components = (global::System.IntPtr)value;
    }
}

public sbyte** Labels
{
    get
    {
        return (sbyte**)((global::LibPostalNet.LibpostalAddressParserResponse.__Internal*)__Instance)->labels;
    }

    set
    {
        ((global::LibPostalNet.LibpostalAddressParserResponse.__Internal*)__Instance)->labels = (global::System.IntPtr)value;
    }
}

代码应该返回一个长度为 num_components 的字符串数组。

你能帮我解决这个问题吗?

【问题讨论】:

    标签: c# c++ .net binding cppsharp


    【解决方案1】:

    这有点复杂,因为它们是指向字符指针列表的指针,非常类似于字符串数组。

    您需要迭代指针,检索内部指针并将它们转换为字符串(我假设您可以使用非托管代码):

    libpostal_address_parser_response response = (retrieve from the library);
    
    List<string> components = new List<string>();
    List<string> labels = new List<string>();
    
    //Not sure the name of num_components as you haven't added it to the question
    //check if the name is correct
    for(int buc = 0; buc < response.NumComponents; buc++)
    {
        sbyte* pLabel = response.Labels[buc];
        sbyte* pComponent = response.Components[buc];
    
        labels.Add(Marshal.PtrToStringAuto((IntPtr)pLabel));
        components.Add(Marshal.PtrToStringAuto((IntPtr)pComponent));
    }
    
    //Now you have the components and the labels in their respective lists ready for usage.
    

    【讨论】:

    • 版主注意:虽然谈话的开始是出于正当目的,但似乎已沦为不友好的争论。我已经删除了这里所有的cmets,并锁定了帖子。请休息几分钟。
    猜你喜欢
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多