微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C ++ / WinRT将IVector <SomeStruct>返回到C#应用程序

如何解决C ++ / WinRT将IVector <SomeStruct>返回到C#应用程序

我正在尝试将结构列表从C ++ / WinRT返回到C#。我收到的错误消息是:存根接收到错误的数据。

IDL:

namespace SampleComponents
{
    [version(1.0)]
    struct DateTimeInfo
    {
        Int32 Year;
        Int32 Month;
        Int32 Day;
        Int32 Hour;
        Int32 Minute;
        Int32 Second;
        Int32 Milliseconds;
    };

    [version(1.0)]
    struct SampleStruct
    {
        String Name;
        DateTimeInfo Created;
        Int64 Amount;
    };

    [default_interface]
    runtimeclass SampleRetrieval : ISampleRetrieval
    {
        SampleRetrieval();
    }

    [version(1.0)]
    [uuid(aa11a991-7a39-4278-973b-9a73776d6519)]
    interface ISampleRetrieval : IInspectable
    {

        HRESULT GetSamples([out,retval] Windows.Foundation.Collections.IVector<SampleStruct>** result);

    }

}

SampleComponents.h:

#include "SampleComponents.g.h"

using namespace winrt::SampleComponents;

namespace winrt::SampleComponents::implementation
{

    struct SampleRetrieval : SampleRetrievalT<SampleRetrieval>
    {
        SampleRetrieval() {

        };

        Windows::Foundation::Collections::IVector<SampleStruct> GetSamples() const;
        
    };


}

namespace winrt::SampleComponents::factory_implementation
{
    struct SampleRetrieval : SampleRetrievalT<SampleRetrieval,implementation::SampleRetrieval>
    {
    };

}

SampleComponents.cpp:

#include "pch.h"
#include "SampleComponents.h"

using namespace winrt;

namespace winrt::SampleComponents::implementation
{

    Windows::Foundation::Collections::IVector<SampleStruct> SampleRetrieval::GetSamples() const
    {
        Windows::Foundation::Collections::IVector<SampleStruct> items{ winrt::single_threaded_vector<SampleStruct>() };
        do
        {
            ... GET DATA ...

            SampleStruct sample;

            ... FILL SAMPLE DATA ...

            items.Append(sample);

        } while (... CONDITION ...);


        return items;
    }

}

当我从C#调用SampleRetrieval.GetSamples()时,就是我得到异常。

我不确定这里缺少什么。我尝试了许多不同的方法,但无法正常工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。