首页 > 解决方案 > c++主机如何在windows和linux上将字节[]数组“输出参数”传递给ac#方法?

问题描述

我知道当 c++ 主机将输入参数传递给 windows 和 Linux 上的 ac# 方法时我应该使用哪个标签,但是在我的项目中,c# api 有一个“byte [] array”输出参数,如下所示,我没有找不到此案例的任何标签。

C#代码:

public static string DoWork(int msgSize, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] byte[] errMessage)

C++ 代码:

typedef char* (*doWork_ptr)(int dataSize, char * data);

我尝试了上面的[MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)],但它只能用作“输入”而不是“输出”。那么我应该在 windows 和 Linux 上使用哪个标签作为输出参数呢?谢谢。

供参考:

1.基本代码可以参考https://github.com/dotnet/samples/tree/main/core/hosting/HostWithCoreClrHost,我只是替换了项目中的“DoWork”函数。

2.下面的文章提到了如何在c#中导出一个c风格的数组,但是没有提到输出参数的情况。 https://docs.microsoft.com/en-us/dotnet/framework/interop/default-marshaling-for-arrays

3.主机用c++编写,在Linux和windows上都用coreclr调用ac#dll中的方法。

标签: c#c++coreclr

解决方案


推荐阅读