Domanda

Sto scrivendo un adattatore .NET per una libreria C / C ++ in cui un metodo "barra" prende un normale FILE stdio *. È possibile creare un'interfaccia in modo che l'utente del codice gestito possa passare un flusso (File) gestito? Cioè senza creare un buffer intermedio e un codice per reindirizzare i dati. Inoltre, il presupposto che bar () legge solo migliora le cose?

// native code
void bar(FILE*);

// interface for managed code
void foo(System::IO::FileStream^ file)
{
    FILE* stdio_handle = ???;

    bar(stdio_handle);
}
È stato utile?

Soluzione

System.IO.FileStream. Maniglia

Non è necessariamente stdio . È un handle di Windows. Non credo che FileStream sia basato su stdio per avere un stdio .

Come ha sottolineato Marc e menzionato nel collegamento MSDN, potresti prendere in considerazione l'utilizzo della proprietà SafeFileHandle (se utilizzi .NET 2.0+) anziché Gestisci ( che ora è considerato obsoleto). Tuttavia, nelle versioni precedenti è disponibile solo Gestisci .

Altri suggerimenti

  

È possibile creare un'interfaccia   in modo che l'utente del codice gestito possa passare a   gestito (File) Stream?

No, non è possibile convertire uno stream in un descrittore di file ( FILE *).

Se devi avere un handle stdio, puoi sempre usare fopen per aprire il file in primo luogo. Questo descrive un wrapper per esportare il file c stdlib e quindi usa l'interoperabilità per lavorare con loro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top