2013-04-03 120 views
0

我试图做到这一点:阵列结构在C#

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; 
    } 
} 

,但我得到这两个错误:

错误1:

固定大小的缓冲区类型必须是一个如下所示:bool, double C:\ Users \ Aseel \ Documents \ Visual Studio 2010 \ Projects \ CBS \ CBS \ GlobalVar。 cs 40 22 CBS

错误2:

GlobalVar.sentences.xplus':不能有实例字段初始值设定在 结构C:\用户\ Aseel \文档\ Visual Studio的 2010 \项目\ CBS \ CBS \ GlobalVar.cs 41 24 CBS

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

+0

由以前我的意思是上面的代码.. – Aseel84

+1

你应该考虑使用'class'。 (http://msdn.microsoft.com/en-us/library/y23b5415%28VS.71%29.aspx) – pascalhein

+0

@csharpler:请不要发布.NET 1.1的链接。 –

回答

1

一般来说,运送COM和.NET之间对象时,必要的是,任一对象具有非常简单的内存占用量,或者是,在对象中的数据从一个数据结构,它适合于一个框架被复制变成适合其他人的一种。

我无法确切地知道你想要用你的数据结构做什么,但最简单的做法可能是将所有内容都存储在一个或多个Int32数组中,并将其自己的解释赋予其中的数据。例如,而不是使用的sentence_node指针链表,对阵列中的所有sentence_node项目的数据,并在sentences店的第一个节点的数组索引,每个项目有每个节点持有的数组索引下一个。如果你这样做,用COM和.NET编写的代码将能够直接使用数据,而不必复制或转换它。