2017-11-30 22 views
6

Tôi đã được cung cấp một thư viện của bên thứ ba bao bọc mã C++ không được quản lý vào C# api, một trong các hàm có tham số xuất hiện là cấu trúc từ không gian tên chung toàn cục một thể hiện của cấu trúc đó trong C#?Gọi mã C++ với cấu trúc từ C#

Đây là C++ Struct:

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

Khi chúng tôi cố gắng để khai báo một thể hiện của nó trong C# trình biên dịch nói toàn cầu :: GROUPINFO là không có sẵn do mức độ bảo vệ của nó.

C++ chữ ký

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

C# chữ ký

VMIManaged.QueryGroup(sbyte*, GroupInfo*) 

Tôi có một lớp được gọi là thông tin nhóm

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

và khi tôi cố gắng để thực hiện điều đó sử dụng mã này tôi nhận được một không thể chuyển đổi lỗi

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

Từ một số đoạn mã bạn đã cung cấp khó hiểu chính xác vấn đề là gì . Bạn có thể cung cấp dòng mã không? – mageos

+0

cảm ơn cho các bình luận mageos tôi đã sửa đổi bài viết với dòng đó là không. – user2379915

+0

Bạn đã thử vmi.QueryGroup (grpName, &gi);? – mageos

Trả lời

2

Bạn rất có thể gặp lỗi vì mức độ bảo vệ mặc định của hàm tạo mặc định trong C# cho lớp GroupData của bạn. Nếu nó được xác định trong một tệp khác từ tệp mà bạn đang cố gắng sử dụng, hãy xác định tệp như thế này sẽ hoạt động:

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