0

我正在尝试这样做:

public static class GlobalVar
{
    [DllImport("Export.dll")]
    public static extern sentences Export();
    public unsafe struct sentence_node
    {
        public sentence_node* next;   // next node in the dictionary in the same level
        public int sNum;  // sentence number starting from 1
        public int sLoc;  // the location in the sentence (protien)
    }

    public unsafe struct sentences
    {  // list of lists of sentences in which words exists. 
        public fixed sentence_node* sList[50];
        public char[,] xplus = new char[50, 100];    
        public int wordCount;   
    }
}

但我得到这两个错误:

错误一:

固定大小缓冲区类型必须是以下之一:bool、byte、short、int、long、char、sbyte、ushort、uint、ulong、float 或 double C:\Users\Aseel\Documents\Visual Studio 2010\Projects\CBS \CBS\GlobalVar.cs 40 22 CBS

错误2:

GlobalVar.sentences.xplus':在结构 C:\Users\Aseel\Documents\Visual Studio 2010\Projects\CBS\CBS\GlobalVar.cs 中不能有实例字段初始值设定项 41 24 CBS

dll 文件包含 C 语言中的搜索算法,并具有我在上面发布的两个结构以及其他结构,但我需要这两个来显示我的结果。有没有办法进入这些结构而无需在 C# 中再次重新定义它们?

4

1 回答 1

1

一般而言,在 COM 和 .NET 之间传输对象时,要么对象具有非常简单的内存占用,要么对象中的数据从适用于一种框架的数据结构复制到适用于框架的数据结构中。适合对方。

我无法准确说出您要对数据结构做什么,但也许最简单的做法是将所有内容存储在一个或多个数组中,Int32并对其中的数据进行自己的解释。例如,不要使用 的指针链接列表,而是将sentence_node所有sentence_node项目的数据放在一个数组中,并为每个项目sentences存储第一个节点的数组索引,并让每个节点保存下一个节点的数组索引。如果您这样做,用 COM 和 .NET 编写的代码将能够直接使用数据,而无需复制或转换它。

于 2013-04-03T22:20:47.650 回答