C# - 在 C# 中的等效数据类型中编组 char **
C# - marshaling char ** in Equivalent data type in C#
我正在开发使用基于 C 的库的 C#.Net 应用程序。因为它需要 C# Wrapper,所以我正在实现代码以从基于 C 的库中编组函数,以便在 C# 中访问并正确映射数据类型。
我在库中有一个函数,它通过引用获取一个 char 数组,该函数包含用其中的值更新数组的逻辑。因此,在函数调用时我们可以传递空数组并在调用后访问结果值。
Objective:通过引用传递空字符数组和return值
C-dll函数:
int function_call(char ** var);
C函数调用代码:
char *name = NULL;
int val = function_Call(&name);
C# 包装器代码:
[DllImport("mylibrary.dll", CallingConvention = CallingConvention.Cdecl)]
static extern int function_call([In] string[] val);
C#函数调用代码:
string[] name = null;
int ret = function_call(name);
我遇到过类似的查询:
- How to get char** using C#? [duplicate]
How do I marshal a pointer to an array of pointers to structures?
C# equivalent to C const char**
全部都试过了,还是不行。 returns 空值。
有没有一种简单的方法来编组 Char ** ?
您可以简单地将其编组为 IntPtr :
[DllImport("mylibrary.dll", CallingConvention = CallingConvention.Cdecl)]
static extern int function_call(IntPtr val);
只是在函数调用端,将内存分配给指针并访问指针保存的数据:将非托管内存块中的数据编组为泛型类型参数指定的类型。
我正在开发使用基于 C 的库的 C#.Net 应用程序。因为它需要 C# Wrapper,所以我正在实现代码以从基于 C 的库中编组函数,以便在 C# 中访问并正确映射数据类型。
我在库中有一个函数,它通过引用获取一个 char 数组,该函数包含用其中的值更新数组的逻辑。因此,在函数调用时我们可以传递空数组并在调用后访问结果值。
Objective:通过引用传递空字符数组和return值
C-dll函数:
int function_call(char ** var);
C函数调用代码:
char *name = NULL;
int val = function_Call(&name);
C# 包装器代码:
[DllImport("mylibrary.dll", CallingConvention = CallingConvention.Cdecl)]
static extern int function_call([In] string[] val);
C#函数调用代码:
string[] name = null;
int ret = function_call(name);
我遇到过类似的查询:
- How to get char** using C#? [duplicate]
How do I marshal a pointer to an array of pointers to structures?
C# equivalent to C const char**
全部都试过了,还是不行。 returns 空值。 有没有一种简单的方法来编组 Char ** ?
您可以简单地将其编组为 IntPtr :
[DllImport("mylibrary.dll", CallingConvention = CallingConvention.Cdecl)]
static extern int function_call(IntPtr val);
只是在函数调用端,将内存分配给指针并访问指针保存的数据:将非托管内存块中的数据编组为泛型类型参数指定的类型。