C/Visual C - USAR CMENFILE pero con la API

 
Vista:

USAR CMENFILE pero con la API

Publicado por MaC (15 intervenciones) el 30/05/2001 14:17:44
Necesito, hacer que el reproductor de Flash abra un archivo en memoria, se que las MFC usan la CMenFile, pero quisiera usarlo con la API. Desde ya, mil gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Cómo abrir un archivo en memoria con el reproductor de Flash utilizando la API

Publicado por Alejandro (913 intervenciones) el 25/09/2024 22:18:07
Para abrir un archivo en memoria con el reproductor de Flash utilizando la API en C/Visual C++, puedes seguir los siguientes pasos:

1. Incluye los archivos de encabezado necesarios en tu código:

1
2
#include <Windows.h>
#include <Shlwapi.h>

2. Carga el archivo en memoria utilizando la función `PathFileExists` para verificar si el archivo existe y la función `GetFileSize` para obtener el tamaño del archivo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const char* filePath = "ruta_del_archivo";
HANDLE hFile = CreateFile(filePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE) {
    // Manejo de error
}
 
DWORD fileSize = GetFileSize(hFile, NULL);
if (fileSize == INVALID_FILE_SIZE) {
    // Manejo de error
}
 
BYTE* fileData = new BYTE[fileSize];
DWORD bytesRead;
ReadFile(hFile, fileData, fileSize, &bytesRead, NULL);
CloseHandle(hFile);

Asegúrate de reemplazar `"ruta_del_archivo"` con la ruta real del archivo que deseas abrir en memoria.

3. Crea un archivo temporal en memoria utilizando la función `CreateFile` con la bandera `FILE_ATTRIBUTE_TEMPORARY`:

1
2
3
4
HANDLE hTempFile = CreateFile(NULL, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY, NULL);
if (hTempFile == INVALID_HANDLE_VALUE) {
    // Manejo de error
}

4. Escribe los datos del archivo en memoria en el archivo temporal utilizando la función `WriteFile`:

1
2
DWORD bytesWritten;
WriteFile(hTempFile, fileData, fileSize, &bytesWritten, NULL);

5. Cierra el archivo temporal:

1
CloseHandle(hTempFile);

Ahora puedes utilizar el archivo temporal en memoria con el reproductor de Flash.

Recuerda liberar la memoria asignada para `fileData` utilizando `delete[] fileData` cuando ya no lo necesites.

Espero que esta solución te sea útil. ¡Buena suerte con tu proyecto, MaC!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar