如何将C#struct传递给C ++

时间:2014-11-27 12:01:13

标签: c# windows-phone-8 c++-cx

我有一个可供C#WP应用程序使用的WP C ++运行时组件。

在C ++ Runtime Component中,我有

public interface class ICallback
{
public:
    virtual void sendMail(Platform::String ^to, Platform::String ^subject, Platform::String ^body);
};

在C#应用程序中,我有CallbackImpl,它实现了ICallback

public class CallbackImpl : Windows8Comp.ICallback
{
    public void sendMail(String to, String subject, String body)
    {
        //...
    }

它完美无缺。

但现在我需要传递比String更复杂的东西:在C#中我有

public class MyDesc
{
    public string m_bitmapName { get; set; }
    public string m_link { get; set; }
    public string m_event { get; set; }
}

我添加了:

public class CallbackImpl : Windows8Comp.IMyCSCallback
{
    private List<MyDesc> m_moreGamesDescs;
    public List<MyDesc> getMoreGamesDescs()
    {
        return m_moreGamesDescs;
    }
    // ...
}

如何从C ++调用它?

public interface class ICallback
{
public:
    virtual <what ret val?> getMoreGamesDescs();    
};

我试图创建一个&#34;镜像&#34;像这样的C ++结构:

struct MyDescCPP
{
    Platform::String ^m_bitmapName;
    Platform::String ^m_link;
    Platform::String ^m_event;
}

但我不明白C#&#39; List在C ++中的映射。

1 个答案:

答案 0 :(得分:0)

这是你需要的吗?

virtual List<MyDescCPP>^  getMoreGamesDescs(); 

^旁边没有MyDescCPP(短划线),因为与List<T>类型ref不同,您定义的MyDescCPPstruct,这意味着它是value类型。

编辑:

哦,您的struct必须是value classvalue struct,因为您想要CLR类型,而不是原生类型:

value class MyDescCPP
{
    Platform::String ^m_bitmapName;
    Platform::String ^m_link;
    Platform::String ^m_event;
}

Classes and Structs (C++ Component Extensions)