2010-02-03 11 views
0

J'essaie d'appeler une fonction C de C# si C++tableau Convertir <Byte>^données à octet const * Données - C++/CLR

donc en gros C# -> C++ -> C

En C#, j'ai byte [] octets - qui lit les informations du fichier. Je passe le tableau d'octets et la taille à C++.

En C++ j'obtiens le tableau d'octets et la taille mais je ne suis pas capable de convertir aux types de données spécifiques.

void Image::OpenMemFile(array<Byte>^ data, unsigned int size) 
{ 

    Free(); 
    m_dataStream = data; 
    Byte const* streamData = &data[0]; // this is where it throws error 
     // Should I use marshaling here ? What call should that ;be ? 
     hImage = ::OpenMemImage(streamData ,&nbsp;size); 
    modified = false; 
} 

// this is the function I&nbsp;need to call 
EXIVSIMPLE_API HIMAGE OpenMemImage(const&nbsp;BYTE *data, unsigned int size) 
{ 
    // code 
     imgWrap->image = Exiv2::ImageFactory::open(data, size); 

} 

la fonction C, il doit appeler est

Image::AutoPtr ImageFactory::open(const byte* data, long size) 
    { 
     /// code 
    } 

Je dois aider à convertir le tableau d'octets à l'octet const *. Je réalise que je dois utiliser Marshaling. Existe-t-il une fonction spécifique pour marshaler les tableaux en C++?

Toute aide est appréciée.

Merci

Répondre

1
pin_ptr<unsigned char> pin_buffer = &data[0]; 
unsigned char* pData = pin_buffer;