2017-11-30 11 views
6

アンマネージドC++コードをC#APIにラップするサードパーティ製のライブラリが与えられました。関数の1つに、ネイティブのグローバル名前空間の構造体と思われるパラメータがあります。 C#でその構造体のインスタンス?C#の構造体でC++コードを呼び出す

これは、C++構造体である:我々はC#でコンパイラをそれのインスタンスを宣言しようとすると

struct GroupInfo 
{ 
    int     cMembers;           // Current # of members in the group. 
    char    saMembers[cMaxMembers][cMaxLoginID + 1];   // Members themselves. 
}; 

グローバル言う:: GROUPINFOは、その保護レベルには使用できません。

C++署名

int QueryGroup(char* sGroupName, 
    GroupInfo& gi); 

C#の署名

VMIManaged.QueryGroup(sbyte*, GroupInfo*) 

私はグループ情報

class GroupInfo 
{ 
    public int cMembers; 
    public sbyte[,] saMembers; 
} 

というクラスを持っていると私はこのコードを使用することを実現しようとしたとき、私はできません取得変換エラー

GroupInfo gi = new GroupInfo(); 

unsafe 
{ 
    sbyte* grpName; 
    fixed (byte* p = groupNameBytes) 
    { 
     grpName = (sbyte*)p; 
    } 
    return vmi.QueryGroup(grpName, gi); // cannot convert from class GroupInfo to GroupInfo* 
} 
+0

抜粋から、あなたが提供している、問題が正確であるかを理解するのは難しいです。あなたは失敗しているコード行を提供できますか? – mageos

+0

コメントmageosのおかげで私は失敗している行で投稿を修正しました。 – user2379915

+0

あなたはvmi.QueryGroup(grpName、&gi);? – mageos

答えて

2

GroupDataクラスのC#の既定のコンストラクタの既定の保護レベルのために、エラーが発生する可能性が最も高いです。それはあなたがそれを使用しようとしているファイルとは別のファイルに定義されている場合は、このようにそれを定義して動作するはずです:

class GroupInfo 
{ 
    public GroupInfo() {} 
    public int cMembers; 
    public sbyte saMembers[cMaxMembers][cMaxLoginID + 1]; 
}; 
関連する問題