C/Visual C - reservar espacio en memoria

 
Vista:

reservar espacio en memoria

Publicado por Oz (4 intervenciones) el 01/06/2007 23:37:49
Buenas compañeros
Necesito reservar un espacio en la memoria para almacenar una variable esto en C se hace con la funcion globalAlloc alguno sabe como se hace con su equivalente en VB

GRACIAS AL QUE SEPA
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

RE:reservar espacio en memoria

Publicado por Edardo Negrete (76 intervenciones) el 02/06/2007 01:04:08
Yo he usado la funcion redim

Dim MiMatriz() As Integer ' Declara una matriz dinámica.
Redim MiMatriz(5) ' Asigna 5 elementos.

' Cambia el tamaño a 15 elementos sin borrar el contenido de los 5 que ya tenia
Redim Preserve MiMatriz(15)

Espero que sea lo que buscas

saludos!!!!
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

RE:reservar espacio en memoria

Publicado por fernando.gomez (1603 intervenciones) el 02/06/2007 01:13:55
En C no existe la función GlobalAlloc. Se hace con malloc. En C++, con el operador new. Ah, pero si empleas el API de Windows, entonces GlobalAlloc es válido.

VB está basado en COM y COM no soporta la ubicación de memoria.

Ahora, VB soporta el ABI de C, por lo que puedes mandar llamar al API de Windows haciendo algo como:

Declare Function GlobalAlloc Lib "kernel32" Alias "SendMessage" (ByVal dwFlags As _
Long, ByVal dwSize As Long) As Long

y entonces ya puedes emplear GlobalAlloc. Aunque no sé para qué te servirá eso.

Saludos.
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

RE:reservar espacio en memoria

Publicado por Oz (4 intervenciones) el 04/06/2007 21:26:58
Gracias Fernando, no se que me aconsejas es que tengo un codigo en C que por medio de una dll me devuelve una infomacion la cual almacena con apuntadores, pero antes usa el GlobalAlloc para reservar el espacio en memoria, lo que me tiene trabado es ver como VB pueda manejar los apuntadores

SALUDOS
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

RE:reservar espacio en memoria

Publicado por fernando.gomez (1603 intervenciones) el 04/06/2007 21:39:04
Visual Basic 6.0 NO maneja apuntadores. Todos los objetos son objetos COM y se guían por esas mismas reglas. VB no está diseñado para soportar apuntadores.

En el caso de VB.NET, éste se adhiere a las reglas del CLR y por ende contiene el tipo de dato System.IntPtr que resulta ser algo similar a un puntero (i.e. la dirección de memoria). Pero no hay algo similar en VB6, hasta donde yo sé.

Por cierto, que las cadenas de texto en VB no son cadenas char*, sino que es un tipo de dato cuyo equivalente en C/Win32 es BSTR.

Saludos.
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

RE:reservar espacio en memoria

Publicado por Oz (4 intervenciones) el 04/06/2007 21:41:38
Gracias Fer por ahi lei que si se podia, no expecificaban mucho del asunto era utilizando unas dll.

Lo que me haz dicho del BSTR se ve interesante gracias

SALUDOS
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

RE:reservar espacio en memoria

Publicado por fernando.gomez (1603 intervenciones) el 04/06/2007 23:35:00
Bueno, a ver, es que VB soporta el ABI de C (Application Binary Interface), por lo que se puede comunicar con cualquier DLL escrita en C. Para eso están las palabras reservadas Declare AlgunaFuncion Lib "libreria.dll" Alias "AlgunaFuncionInterna" (Parámetros) As TipoDato.

Gracias a esto, se puede emplear el API de Win32, y con eso puedes emplear GlobalAlloc, como mencioné en un post anterior. A lo que me refería era que de forma nativa no es posible. Ahora bien, GlobalAlloc lo puedes emplear, y sí puedes ubicar memoria, pero como VB no tiene soporte nativo para esto, no sé que uso le podrías dar, realmente.

Finalmente, un apunte más a esto del BSTR. En C, una cadena de texto (aka char*) es un array de caracteres (es decir, todos los caracteres vienen en direcciones de memoria contiguas) que termina en un caracter nulo. Sin embargo, para algunas cuestiones de Windows, es posible que una cadena de texto tenga más de un caracter nulo entre la cadena de texto (por ejemplo, al aplicar soporte Unicode). Por ello es que Windows define el tipo de dato BSTR, el cuál puede tener caracteres nulos en el cuerpo mismo de la cadena de texto. De hecho, un BSTR termina siempre con dos caracteres nulos.

Debido a que este soporte es empleado en Windows, y es el recomendado por COM, VB lo soporta de forma nativa. Es decir, el equivalente en C de:

Dim str As String
str = "Hola mundo"

Sería:

BSTR str;
str = SysAllocString(_T("Hola Mundo"));
...
SysFreeString(str);

Por ello, cuando hablamos de interoperabilidad entre C y VB, para que éste último pueda leer cadenas de texto, tienes que emplear el tipo de dato BSTR. Es una lata, de hecho. Cuando haces una librería COM en C++ tienes que andar lidiando con todo esto. Por ende, si quieres que tu librería maneje cadenas de texto con VB, tienes que cambiarlas para que soporten BSTR en lugar de char* ó wchar_t*.

Saludos.
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

RE:reservar espacio en memoria

Publicado por Oz (4 intervenciones) el 04/06/2007 23:42:15
Como declaro la vrible BSTR veo que si sabes, pero lo pongo en VB y no reconoce el tipo de dato
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

RE:reservar espacio en memoria

Publicado por fernando.gomez (1603 intervenciones) el 05/06/2007 19:28:45
No no, en VB no hay tipo de dato BSTR como tal. Lo que estoy diciendo es que en el tipo de dato String de VB es equivalente al tipo de dato BSTR de C. Este cambio lo tienes que hacer en tus librerías de C.
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