gpt4 book ai didi

包含字符串数组的结构的 C# dllimport

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:47 25 4
gpt4 key购买 nike

我有一个第三方 c dll,我想在我的 c# 项目中使用它。我设法导入了一种读取文件头的方法。现在我想访问读取数据的方法。我认为问题在于包含字符串数组的结构,因此我尝试了各种方法,例如 StringBuilder 列表、创建字符串列表并将其作为数组传递、直接创建字符串数组(如下所示)。在已经花了一整天之后,我不再知道该做什么了。我也不确定我是否可以像现在这样传递一个十进制数组(因为它没有列在 http://msdn.microsoft.com/en-us/library/ac7ay120(v=vs.100).aspx 中)。

dll的C头文件:

enum id_retrieve_enum {
GET_ID = 1,
DO_NOT_GET_ID, // id is in file
NO_ID_IN_FILE,
CREATE_ID // id is not in file
};

struct id_struct {
char **values; // allocated
int size; // optional: DEFAULT_VALUE = NULL_INT
enum id_retrieve_enum retrieve; // optional
};

int importdata(char *fullfilename, int numrows, int numcols, int startrow,
decimal *dataset, struct id_struct *ids);

枚举和结构的C#代码:

public enum id_retrieve_enum
{
GET_ID = 1,
DO_NOT_GET_ID, // id is in file
NO_ID_IN_FILE,
CREATE_ID // id is not in file
};

[StructLayout(LayoutKind.Sequential)]
public struct id_struct
{
[MarshalAs(UnmanagedType.SafeArray)]
public String[] values;
public int size;
public id_retrieve_enum retrieve;
};

dll导入:

[DllImport("libpandconv.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int importdata(
String fullfilename,
int numrows,
int numcols,
int startrow,
Decimal[] dataset,
[In, Out, MarshalAs(UnmanagedType.Struct)] ref id_struct ids);

初始化数据和调用方法:

Decimal[] data = new Decimal[numpoints * highdim];

id_struct ids = new id_struct();
ids.retrieve = (hasid.Equals(1)) ? id_retrieve_enum.GET_ID : id_retrieve_enum.CREATE_ID;
ids.values = new String[numpoints];

importdata(inputfilename, numpoints, highdim, startrow, data, ref ids);

其中 inputfilename 已经被编码并且 numpointshighdimstartrow 已经由 importheader 我已经导入的方法。

最佳答案

您是否尝试过使用 IntPtr 而不是数组并手动解析它?

关于包含字符串数组的结构的 C# dllimport,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9378256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com