Question

J'écris un adaptateur .NET pour une bibliothèque C / C ++ dans laquelle une méthode "bar". prend un DOSSIER stdio régulier *. Est-il possible de créer une interface de sorte que l'utilisateur de code géré puisse transmettre un flux (fichier) géré? C'est sans créer un tampon intermédiaire et un code pour canaliser les données entre. De plus, l’hypothèse que bar () lit seulement améliore-t-elle les choses?

// native code
void bar(FILE*);

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

    bar(stdio_handle);
}
Était-ce utile?

La solution

System.IO.FileStream. Gérer

Ce n'est pas nécessairement stdio . C'est un handle de Windows. Je ne pense pas que FileStream soit construit sur stdio pour avoir un stdio .

Comme Marc l'a souligné et mentionné dans le lien MSDN, vous pouvez envisager d'utiliser la propriété SafeFileHandle (si vous êtes sur .NET 2.0+) au lieu de Handle ( qui est maintenant considéré comme obsolète). Seul Handle est disponible dans les anciennes versions.

Autres conseils

  

Est-il possible de construire une interface   de sorte que l'utilisateur de code géré peut passer un   flux (fichier) géré?

Non, il n'est pas possible de convertir un flux en descripteur de fichier ( FILE *).

Si vous devez avoir un pseudo stdio, vous pouvez toujours utiliser fopen pour ouvrir le fichier en premier lieu. Cette décrit un wrapper pour exporter le fichier c stdlib fonctions, puis il utilise interop pour travailler avec elles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top