2017-11-30 178 views
6

Yönetilmeyen C++ kodunu bir C# API'ye saran bir üçüncü taraf kitaplığı verildi, işlevlerden biri yerel genel ad alanından bir yapı gibi görünen bir parametreye sahip olur. C# içindeki bu yapının bir örneği? nedeniyle koruma seviyesine biz C# bunun bir örneğini bildirmek çalıştığınızdaC++ 'dan bir yapıyla C++ çağrısı C#

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

derleyici küresel diyor :: GROUPINFO kullanılamaz:

Bu

C++ Struct olduğunu.

C++ imza

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

C# imza Ben sınıf denilen grup bilgisi var

VMIManaged.QueryGroup(sbyte*, GroupInfo*) 

ben bu kodu kullanarak i almak uygulamaya çalıştığınızda

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

ve olamaz hatayı dönüştür

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

o konu tam olarak ne olduğunu anlamak zordur . Başarısız olan kod satırını sağlayabilir misiniz? – mageos

+0

Yorum için teşekkürler mageos Ben başarısız olan satır ile yazıyı değiştirdim. – user2379915

+0

vmi.QueryGroup (grpName, &gi);? – mageos

cevap

2

Büyük olasılıkla, GroupData sınıfınız için C# içindeki varsayılan yapıcının varsayılan koruma düzeyi nedeniyle hatayı almanız olasıdır. Eğer kullanmaya çalıştığınız dosyanın, farklı bir dosyada tanımlanırsa bunu böyle tanımlayan çalışması gerekir: Sağladığınız birkaç parçasını itibaren

class GroupInfo 
{ 
    public GroupInfo() {} 
    public int cMembers; 
    public sbyte saMembers[cMaxMembers][cMaxLoginID + 1]; 
};