2

我有一个基本问题,

我有一个 C++ 非托管 dll,它具有带参数的函数进出一些无符号字符、无符号短、无符号长、有符号字符、有符号短、有符号长数据类型。

我需要编组它还是可以直接映射它?如果有的话,最好的做法是什么?

例如dll

unsigned long SomeFunc(unsigned char variableA);

C#(C# 中的直接映射)

[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.U4)]
public static extern uint SomeFunc(byte variableA);
4

2 回答 2

2

大多数数据类型在托管和非托管内存中都有一个共同的表示,并且不需要互操作封送拆收器的特殊处理。这些类型称为 blittable 类型,因为它们在托管和非托管代码之间传递时不需要转换。

MSDN https ://docs.microsoft.com/en-us/dotnet/framework/interop/blittable-and-non-blittable-types

于 2018-05-28T05:11:00.417 回答
0

为了扩展 mozfox 的响应,列表是:byte, sbyte, short, ushort, int, uint, long, ulong, IntPtr, UIntPtr, float, double, 那些,那些的一维数组 ( []) struct。缺少的是bool(可以以各种方式编组),char(不要问为什么......我不知道)string,。

于 2018-05-28T06:23:46.267 回答