c# - 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中的方法。
解决方案
推荐阅读
- laravel - 在 Laravel 8 中使用 yajra 数据表加载 DataTable where select
- r - 有没有办法让 R 从 Outlook 电子邮件中读取信息?
- android - 评估根项目“XXXX”时出现问题(Android Studio)
- oauth-2.0 - PHP socialconnect/auth 示例代码返回 404
- java - 如何在 CloseableHttpClient APi 中编码 Post Data JSON
- c# - Dicord.net 离线用户在尝试禁止时总是返回 null
- c# - 列表框,没有得到选定的项目
- firebase - Firebase 多个会话正在运行?
- 3d - 我想知道如何在 Unity Map Box 中以您想要的坐标浮动对象
- python - 使用 Python 和 mySQL 进行动态 SQL 查询