2010-05-19 18 views
8

Estoy usando open_memstream en una biblioteca mía, pero me gustaría transferir esta biblioteca a MSVC. Parece que no hay una función equivalente disponible, pero ¿hay algo similar?Equivalente a open_memstream para MSVC

Lo open_memstream hace es que se necesita un char ** destino y tamaño y devuelve un archivo * que muchos escriben a, los datos se almacenan en una memoria intermedia asignada dinámicamente (accesible desde el argumento char **). Al cerrar el ARCHIVO, el carácter ** contiene los datos que se escribieron en la secuencia. Esto hace una manera fácil de construir secuencias de cadenas grandes y complejas.

Si bien es posible tanto leer como buscar desde la memoria de membranas, solo escribo en ella.

¿Hay alguna forma de abrir un archivo MEMORIA similar en MSVC? Además, esto es C puro, sin C++.

+0

Me di cuenta BSD tiene una función llamada funopen que le permite crear una secuencia personalizada mediante el establecimiento de devoluciones de llamada, tal vez hay algo similar para MSVC? – ext

Respuesta

2

Una función similar en Windows sería CreateStreamOnHGlobal(). Sin embargo, eso funciona con la interfaz IStream COM, no es un reemplazo directo para FILE. Es posible que desee echar un vistazo al código fuente de Cygwin para ver lo que hicieron.

+0

Parece que Cygwin usa la biblioteca newlib runtime, que implementa su propia estructura FILE y, por lo tanto, implementa fopencookie (y open_memstream). Al menos eso es lo que encuentro en la fuente. – ext

+0

Sí, eso no es poco probable. Tendría que saber que el ARCHIVO * hace referencia a un recurso de tipo no de archivo. Si no quiere usar Cygwin, está condenado a reemplazar su código de flujo de memoria. –