Bibliotecas: Mapeo de Memoria

 

Mapeo de Memoria:

DLL (MS VC++ 2010) para trabajar con archivos mapeados en memoria.

Autor: o_O

 

Puede ser útil para alguien:

Como alternativa, puedes crear un disco RAM y colocar allí los archivos. Ram disc es un disco virtual ubicado en la RAM de tu ordenador.

Yo uso este tipo de software para crear un disco Ram http://ramdisk.nm.ru/ramdiskent-rus.htm

 

Me gustaría que todo pudiera ser escrito en MQL, para que pudiera ser utilizado sin dll.

Gracias Alex, cosas interesantes.

 
Urain:

Estaría bien que todo esto se pudiera implementar en MQL para poder usarlo sin dll.

Desafortunadamente, todo el problema radica en una sola función - MapViewOfFile. Devuelve un puntero, por lo que no se puede utilizar directamente en MQL ... no se puede llevar un puntero a una matriz.

Todas las demás funciones (sólo hay 4 de ellos -CreateFileMapping, OpenFileMapping, UnmapViewOfFile, CloseHandle) puede ser llamado.
pero sólo este MapViewOfFile no dio la oportunidad de crear un trabajo totalmente funcional de MQL con mapeo directamente. y es una lástima, yo también realmente quería hacerlo sin un DLL auto-escrito.

 
sergeev:

Por desgracia, todo el problema radica en una sola función - MapViewOfFile. Devuelve un puntero, por lo que no se puede utilizar directamente en MQL ... no se puede llevar un puntero a una matriz.

Todas las demás funciones (sólo hay 4 de ellos -CreateFileMapping, OpenFileMapping, UnmapViewOfFile, CloseHandle) puede ser llamado.
pero sólo este MapViewOfFile no dio la oportunidad de crear un trabajo totalmente funcional de MQL con el mapeo directamente. y es una lástima, yo mismo también realmente quería hacer sin un DLL auto-escrito.

En realidad no es usted, el mensaje fue a los desarrolladores de MQ, el problema es viejo y su solución es, obviamente, en la demanda.

ZY yo escribí funciones de pasar punteros a array via evento para propósitos similares (pero dentro de un MT), pero tampoco funcionaba sin dll, aunque las funciones en la dll eran de una sola linea.

 
Urain:

En realidad no eres tú, el mensaje era para los desarrolladores de MQ, el problema es antiguo y su solución es obviamente demandada.

Ah sí, lo que se necesita se necesita.

¿Has hecho alguna vez algo para crear una función conversora?

Por ejemplo, alguna función dll devuelve un puntero, así que tenemos int(4). En la mayoría de los casos será un puntero a alguna estructura.

Y la siguiente tarea es sacar datos de esta estructura. Conocemos el tamaño de la estructura, así que primero podemos traducir este puntero a un puntero a un array char.

Aquí hay una pregunta - ¿cómo hacer esta reasignación? ¿Cómo hacer trampa? Tal vez a través de una función intermedia dll, en el que pasar el puntero, y devolverá esta matriz char?
Bueno, y luego esta matriz char por simple = transferencia a nuestra estructura.

Aquí es una variante de dicha función en dll

void Convert(char *_in, char *_out) { _out=_in; }

y se llama desde mql asi

// por ejemplo, la función api devuelve un puntero a una estructura de datos
int ptr=ФункцияИзАпи(); // puntero a ДанныеИзАпи

struct ДанныеИзАпи
{
  // estructura de datos de la api 16 bytes
};

struct refData
{
 char byte[16]; // imagen de la misma estructura, también = 16 bytes 
};

refData ref;

Convert(ptr, ref.byte); // traduce el puntero a la matriz

ДанныеИзАпи data=ref; // rellenar los campos de la estructura por simple copia

PD
Aunque se me ocurrió una idea con memcpy. También copia por puntero. Debería probarlo ahora.
 
Sí. memcpy funciona ! y en conjunción con strcpy es posible procesar incluso cadenas correctamente,

por lo que puede funcionar directamente!!!!
 

Otra piedra a favor del MK.

¿Por qué tanto chanchullo?

¿De verdad sus propios programas pueden estropear la cara?

 
Urain:

En realidad, esto no es una piedra contra ti, el mensaje era para los desarrolladores de MQ, el problema es antiguo y su solución es obviamente demandada.

En definitiva, todo está bien, el problema ha sido resuelto, la biblia para MQL5 sin usar una DLL autoescrita ha sido hecha y probada con éxito.

Ya la he enviado para su publicación :)

 
her.human:

Otra piedra a favor del MK.

¿Por qué tanta manipulación?

¿De verdad sus propios programas pueden estropear la cara?

Los programas MQ5/EX5 se distribuyen muy fácilmente y sin un estricto control de seguridad pueden causar daños irreparables a los usuarios.

Por eso el lenguaje de aplicación MQL5 se ha creado protegido, sin posibilidad de llamar a funciones peligrosas y trabajando en su propia caja de arena. Existe integración con librerías DLL para ampliar la funcionalidad.

 
Renat:

Los programas MQ5/EX5 son muy fáciles de distribuir y sin un estricto control de seguridad pueden causar daños irreparables a los usuarios.

Por ello, el lenguaje de aplicación MQL5 está diseñado para estar protegido, sin posibilidad de llamar a funciones peligrosas y trabajando en su propio sandbox. Existe integración con librerías DLL para ampliar la funcionalidad.

¿Qué pasa con el Mercado?

¿O se permitirán las win dlls en el mercado?

En general, conozco la respuesta, por eso sugerí hacer esta implementación en el estándar MQL5.