2016-03-28 27 views
2

Ben şuna benzer bir C++ fonksiyonu var parametre:ile C++ işlevinin çağrılması hükümsüz * C# app

int Compression::DecompressPacket(const void* inData, int inLength, void* outData, int outLength) 
{ 
    int headerLength = ComputeDataHeaderLength(inData); 
    return DecompressDataContent(static_cast<const unsigned char*>(inData) + headerLength, inLength - headerLength, outData, outLength); 
} 

Fonction bir C++ kütüphaneye içinde olan bir sınıf içinde. Öte yandan, C# uygulamasında bu özelliği çağırmam gerekir. Fonction, tiplerin parametrelerini girmemi ister: "void *, int, void *, int". , Adresini almak boyutunu almak veya beyan edemez

Hata 8:

Ben güvenli olmayan bir işlevi bir boşluk * yapmaya

,
unsafe private void lstbox_packets_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    [...] 
    byte[] value = byteValuePackets[lstbox_packets.SelectedIndices[0]];  
    void* pValue = &value; 
    [...] 
} 

hatası alıyorum yönetilen tipte bir işaretçi ('bayt []')

C++ ve işaretçisine aşina değilim ama nasıl bir boşluk * türü C# olarak geçirdiğimi tahmin ediyorum.

cevap

2

Sen value adresini almamalıdır ve ayrıca fixed deyimini kullanmak zorunda: https://msdn.microsoft.com/en-: Burada

fixed (void* pValue = value) 
{ 
    //... 
} 
+0

sabit referans için bağlantı var us/library/f58wzh21.aspx? f = 255 & MSPPError = -2147217396 –

+0

@EliAlgranti doğru, cevabımda zaten sağladım. –

+0

Üzgünüm, haklısın. Sabit anahtar kelimedeki stil, görünüşe göre bir bağlantı oluşturmuyordu :) –