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

しかし、次の2つのエラーが発生します:

エラー 1:

固定サイズのバッファ タイプは、次のいずれかでなければなりません: 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 言語の検索アルゴリズムが含まれており、上記の 2 つの構造体と他の構造体が含まれていますが、結果を表示するにはこれら 2 つが必要です。C# で再定義せずにこれらの構造体に入る方法はありますか?

4

1 に答える 1

1

一般に、COM と .NET の間でオブジェクトを転送する場合、オブジェクトのメモリ フットプリントが非常に単純であるか、オブジェクト内のデータが、あるフレームワークに適したデータ構造から別のフレームワークに適したデータ構造にコピーされる必要があります。他に適しています。

データ構造で何をしようとしているのか正確にはわかりませんが、おそらく最も簡単なことは、すべてを の 1 つ以上の配列に格納Int32し、その中のデータに独自の解釈を与えることです。たとえば、 のポインター リンク リストを使用するのではなく、sentence_nodeすべてのsentence_node項目のデータを配列に格納し、各項目sentencesの最初のノードの配列インデックスを格納し、各ノードに次の配列インデックスを保持させます。このようにすると、COM と .NET の両方で記述されたコードで、データをコピーまたは変換しなくても、データを直接使用できるようになります。

于 2013-04-03T22:20:47.650 に答える