• Lunes 12 de Mayo de 2025, 12:29

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Neopro

Páginas: 1 ... 7 8 [9] 10 11 ... 13
201
C# / Re: Puntero A Struct Desde C# A Dll C++
« en: Miércoles 9 de Mayo de 2007, 21:29 »
Y al final se pueden crear punteros a tipos administrados???? o struct administrados????

202
C# / Re: Axwindowsmediaplayer
« en: Miércoles 9 de Mayo de 2007, 21:27 »
Yo desintale la version 11, pero igual tuve problemas de codec con los videos en la version 10...

Por lo menos yo lo desinstale desde Agregar o quitar programas, creo que a algunos no les aparecía la posibilidad de quitarlo desde ahi.

203
C# / Re: Error Al Lleva Aplicacion De Win 2000 A Xp
« en: Miércoles 9 de Mayo de 2007, 17:10 »
Eso significa que falta un archivo, puede ser el framework, reinstalalo, o si es una dll, asegurate de que esté en el directorio del programa o en system32

204
C# / Re: Puntero A Struct Desde C# A Dll C++
« en: Martes 8 de Mayo de 2007, 17:04 »
Mmm, ya una vez estando las estructuras listas me envia el siguiente error:

El parámetro no es correcto. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))

En algunos foros, dice que hay que reinstalar el Framework, pero no creo que sea eso, aunque lo hice, y continua el mismo error.

En otros dicen que pueden ser problemas con la version de la DLL, pero yo la llamo antes con otra funcion y no arroja problemas.

Creo que tengo problemas al hacer un ref u out a mat_result, ya que no me permite pasarlo como puntero.

ERROR: Error No se puede adquirir la dirección, obtener el tamaño ni declarar un puntero a un tipo administrado.

205
C# / Re: Puntero A Struct Desde C# A Dll C++
« en: Martes 8 de Mayo de 2007, 15:47 »
Oh, genial, esa es la estructura que necesito, pero tengo un solo problema:

MatResult mat_result = new MatResult();

Queda asignada como null... ...o sea se crea todo, menos la variable raiz, ya que es esa variable a la que tengo que obtener el puntero y poder enviarla a la DLL.

Muchas gracias...

Creo que resolví el tema, espero que me funcione bien, ahora estoy haciendo pruebas...

206
C# / Re: Puntero A Struct Desde C# A Dll C++
« en: Lunes 7 de Mayo de 2007, 23:01 »
Creo que ya he intentado muchas formas de hacerlo y no puedo creer que me acerco a la opcion de que no podré hacer lo que deseo.

Los struct no me permiten deifnir arreglos y si los declaro e inicializo fuera, no toma los tamaños especificados.

La clase no me permite que sea llamada como puntero y ademas si defino tipos, no me permite, ver mas alla del segundo tipo:

Código: Text
  1. public class prueba
  2. {
  3. public tipo1[] var1 = new tipo1[4];
  4. public tipo2 var2;
  5. }
  6.  
  7. public struct tipo1
  8. {
  9. public tipo4[] var4; //Acá no puedo declarar tamaño y si lo hago afuera,
  10. // tampoco lo acepta, o sea compila, pero no ejecuta la accion de asignar memoria
  11. }
  12.  
  13. public struct tipo2
  14. {
  15. public int algo;
  16. }
  17.  
  18. public struct tipo 4
  19. {
  20. public char otro;//No se ve desde la clase, con struct si, pero
  21. //necesito el struct con tamaño definido
  22. }
  23.  

En ese ejemplo, no puedo tener acceso al tipo 4 desde la clase.

Lo ideal sería con struct, pero con el primero en clase, es lo que mas se acerca a lo que necesito.

207
C# / Re: Puntero A Struct Desde C# A Dll C++
« en: Lunes 7 de Mayo de 2007, 18:40 »
Es que dentro del struct solo puedo declararlo como variables sin tamaño fijo. Y al declararlas afuera no me permite cambiar a variables de tamaño fijo.

O sea sigue siendo una variable unidimensional.

Código: Text
  1. //ESTO NO ES VALIDO
  2. public struct MatMinu
  3.        {
  4.            public int MNO;
  5.            public int X;  
  6.            public int Y;  
  7.            public int D;  
  8.        }
  9.  
  10.        public struct MatPair
  11.        {
  12.            public MatMinu sminu;    
  13.            public MatMinu fminu;    
  14.        }
  15.  
  16.        public struct MatAffin
  17.        {
  18.            public int x;
  19.            public int y;
  20.            public int d;
  21.        }
  22.  
  23.        public enum MatCoreIndex
  24.        {
  25.            eMatCore_A = 0,
  26.            eMatCore_B = 1,
  27.            eMatCore_C = 2,
  28.            eMatCore_D = 3,
  29.            eMatCore_Max = 4
  30.        }
  31.  
  32.        public struct MatSubResult
  33.        {
  34.            //ESTO NO ES VALIDO, SOLO ES LO QUE DESEO HACER
  35.            public MatPair[] mat_chartinfo_a = new MatPair[MAT_CHART_MAX ];  
  36.            //ESTO NO ES VALIDO, SOLO ES LO QUE DESEO HACER
  37.            public MatPair[] mat_chartinfo_z = new MatPair[MAT_CHART_MAX ];
  38.            //ESTO NO ES VALIDO, SOLO ES LO QUE DESEO HACER
  39.            public int[] mat_similitude = new MatPair [MAT_CHART_MAX];    
  40.            public MatAffin mat_affinfactor;                
  41.            public short mat_score;                    
  42.            public short mat_status;                    
  43.        }
  44.        public struct MatResult
  45.        {
  46.            //ESTO NO ES VALIDO, SOLO ES LO QUE DESEO HACER
  47.            public MatSubResult[] mat_res = new MatSubResult[(int)MatCoreIndex.eMatCore_Max];
  48.        }
  49.  

Asi deberia ser, pero no me lo permite, y cuando las inicializo afuera como arreglos con ese tamaño, tampoco les cambia el tamaño.

Pero la principal funciono muy bien con class de la siguiente forma:

Código: Text
  1. public class MatResult
  2.        {
  3.            public MatSubResult[] mat_res = new MatSubResult[(int)MatCoreIndex.eMatCore_Max];
  4.        }
  5.  

Pero eso no me permite acceder mas alla de MatSubResult.

208
C# / Re: Puntero A Struct Desde C# A Dll C++
« en: Lunes 7 de Mayo de 2007, 18:28 »
Lo de las clases me permitio perfectamente incializar los valores necesarios para las funciones que necesito, el problema que me surgio es que debo declara otro struct como clase para poder hacer todo bien, pero no me permite el acceso a los campos, a que me refiero, que creo otra clase con los nombres a los cuales quiero acceder, pero al compilar y ver los valores que me arroja la variable, simplemente los guarda como null y no asigna lo que está en la otra clase, es decir no se puede acceder.

Que hago?, necesito inicializar los tamaños, pero no como class no puedo acceder desde otra, pero si como struct.

209
C# / Re: Puntero A Struct Desde C# A Dll C++
« en: Domingo 6 de Mayo de 2007, 03:28 »
Ahhhh, OK.

Eso de las Clases y Struct en C# sabía que eran distintas, pero no sabia si eran o no compatibles con C++, ya probé todas las acciones posibles con struct, asi que por eso debi crear esta discución y por eso mismo te envie un correo, espero que no te haya molestado.

Entonces para los otros tipos derivados, tambien los podré declarar como clases?...

Y siempre los declaro como public, ya me habia topado con eso antes, tambien con las variables internas.

Oye y MUCHISIMAS GRACIAS por tu tiempo, si ya me habias dicho que estabas ocupado.

Atte.

210
C# / Re: Interface De Usuario
« en: Sábado 5 de Mayo de 2007, 17:59 »
Los iconos los puedes hacer tu mismo, descargarlos u obtenerlos desde muchos ejecutables que los poseen...

La direccion que entregaste era un simple trabajo con iconos.

Tambien tienes que tener en cuenta que para una PDA las opciones de programación son menores que en una interfaz Windows XP por ejemplo. Todo está limitado por sistema operativo y el Compact Framwork.

211
C# / Re: Como Crear Un Proyecto De Instalacion!!!
« en: Sábado 5 de Mayo de 2007, 17:50 »
Mira son muchas las opciones, incluso la de incluir un numero de serie, cosa que Yo no he utilizado.

En la pestañla sistema de archivos puedes agregar accesos directos donde quieras, e incluso si tienes insertado un icono, tambien puedes seleccionar un icono para que con eso se vea el acceso directo.

Tambien puedes crear una carpeta nueva en el menu de inicio.

Al seleccionar el proyecto en el explorador de soluciones, con el boton derecho pordras ver que puedes hacer cambios en las ventanas de instalacion como hasta ingreso de claves en el registro de windows en la opcion Ver.

Las opciones son las siguientes:

Sistema de archivos
Registro
Tipos de archivo
Interfaz de usuario
Acciones personalizadas
Condiciones de inicio

Abre esas ventanas y alli te darás cuenta de muchas cosas que podrás realizar.

Suerte.

212
C# / Re: Puntero A Struct Desde C# A Dll C++
« en: Sábado 5 de Mayo de 2007, 17:42 »
Eso me envia un error, ya que me dice que solo puede declarar Variables de los tipos conocidos, o sea:

byte, short, int, char, long... etc...

y no de Struct...

Y estoy usando Visual Studio 2005 con Framework 2.0, que dice que desde esta version se permite declarar tamaños en Struct.

213
C# / Re: Puntero A Struct Desde C# A Dll C++
« en: Viernes 4 de Mayo de 2007, 23:15 »
Y otra duda :

Como se crea esto en C#?

Código: Text
  1. typedef struct {
  2.    MatPair        mat_chartinfo_a[MAT_CHART_MAX];  
  3.    MatPair        mat_chartinfo_z[MAT_CHART_MAX];  
  4.    int            mat_similitude[MAT_CHART_MAX];  
  5.    MatAffin       mat_affinfactor;              
  6.    unsigned short mat_score;                    
  7.    short          mat_status;                
  8. } MatSubResult;
  9.  

Teniendo en cuenta:

Código: Text
  1.  
  2. int MAT_CHART_MAX = 192;
  3.  
  4.  

214
C# / Re: C#,PictureBox y manuales
« en: Viernes 4 de Mayo de 2007, 20:33 »
Cita de: "tatomix"
Algo que se me olvido comentarte es que este codigo que me pusiste no funciona:
this.picturebox.Image = new Bitmap("\dibujo.bmp");
pues dice: Secuencia de escape no reconocida.
Ademas he utilizado el siguiente metodo:
this.pictureBox.Image = Image.FromFile("c:\CsharpStudio\imgFondo.bmp");
pero sigue diciendo lo mismo.
En este caso sería:

Código: Text
  1.  
  2. this.picturebox.Image = new Bitmap(@"\dibujo.bmp");
  3.  
  4. this.pictureBox.Image = Image.FromFile(@"c:\CsharpStudio\imgFondo.bmp");
  5.  
  6.  

También sirve, asi omite el caracter de escape.

215
C# / Re: Pasar Parametros A Una Dll En Vs C++
« en: Viernes 4 de Mayo de 2007, 18:51 »
Por lo menos ahora te retorna algo, podrias probar cambiando los tipos de:

"CharSet=CharSet.Unicode"
Código: Text
  1.  
  2. CharSet=CharSet.Ansi
  3. CharSet=CharSet.Auto
  4. CharSet=CharSet.None
  5.  
  6.  

Lo otro que puedes usar, ya que se trata de un arreglo de char es que tu uses como tipo en vez de char[], byte[]. Son compatibles y tambien te cambia un poco la estructura de lo que muestra. Para C++ es transparente y equivalente, ya que char en C++ es de 8 bits y en C# es de 16 bits y como byte en C# es de 8 bits es mas recomendado.

216
C# / Re: Pasar Parametros A Una Dll En Vs C++
« en: Viernes 4 de Mayo de 2007, 18:18 »
Mira:

A. En el caso de Unmanaged DLL

1.- Invocar a la DLL con DllImport.

2.- Copiar los struct y enum que utilice esa dll, para eso debes tener el .h de la DLL.

3.- Llamar a la funcion y asegurarte de si pasa como puntero, dependiendo de lo que pida la DLL, y pasarla como referencia, enviandole la dirección del puntero con '&', con ref u out.

B. DLL que agregas a la lista de using (Creo que no es tu caso.)

1.- Verficar las funciones a utilizar y llamadas.

2.- Debes tener bien en claro lo que solicita la DLL.

3.- Se crea el objeto y se trabaja directamente con él.

Tambien puedes revisar esto:

http://foros.solocodigo.com/index.php?showtopic=27767

217
C# / Re: Obtener Valor Al Que Apunta Un Puntero
« en: Viernes 4 de Mayo de 2007, 17:59 »
Como haces la llamada a la DLL en C#?

El char en C++ es equivalente a byte, asi que sería bueno que probaras con ese tipo.

Pero como te digo podrias mostrar el codigo para poder ayudarte, no creo que sea complejo, ya llevo 3 semanas trabajando en esto y creo que he aprendido bastante.

218
C# / Re: Control De Errores
« en: Jueves 3 de Mayo de 2007, 17:22 »
Por lo menos lo que te comente me ha sido muy eficaz y tampoco lo encuentro para nada complejo.

Pero suerte.

219
C# / Re: Control De Errores
« en: Jueves 3 de Mayo de 2007, 17:02 »
En Exception puedes especificar que quieres asignarle a ex. Por ejemplo que muestre un tipo determinado de excepción y no todas.

Por ejemplo en vez de usar Exception, puedes usar IOException para lo que son las excepciones de entrada y salida en el caso de busqueda, lectura o escritura de archivos.

Tambien la variable ex la puedes convertir a string y obtener solo los 3 ultimos valores una vez obtenido el largo, para que te informe solo la linea, y asi tambien guardarlos en un archivo de texto o log como quieres Tu.

Aunque si te das cuenta, ex tiene propiedades, prueba con cada una de ellas, por ejemplo:

Código: Text
  1. ex.Source
  2.  

Suerte.

220
C# / Puntero A Struct Desde C# A Dll C++
« en: Jueves 3 de Mayo de 2007, 16:55 »
Holas Amigos, aun luchando con las DLL de C++ y sus tipos para utilizarlos en C#, ahora lo que me queda por realizar es lo siquiente:

En C++ (DLL)

Código: Text
  1. #define MAT_CHART_MAX    192
  2. typedef enum {
  3.     eMatCore_A   = 0,
  4.     eMatCore_B   = 1,
  5.     eMatCore_C   = 2,
  6.     eMatCore_D   = 3,
  7.     eMatCore_Max = 4
  8. } MatCoreIndex;
  9.  
  10. typedef struct {
  11.     MatMinu sminu;    
  12.     MatMinu fminu;    
  13. } MatPair;
  14.  
  15. typedef struct {
  16.     int x;
  17.     int y;
  18.     int d;
  19. } MatAffin;
  20.  
  21. typedef struct {
  22.     MatPair        mat_chartinfo_a[MAT_CHART_MAX];  
  23.     MatPair        mat_chartinfo_z[MAT_CHART_MAX];  
  24.     int            mat_similitude[MAT_CHART_MAX];  
  25.     MatAffin       mat_affinfactor;              
  26.     unsigned short mat_score;                    
  27.     short          mat_status;                
  28. } MatSubResult;
  29.  
  30. typedef struct {
  31.     MatSubResult mat_res[eMatCore_Max];
  32. } MatResult;
  33.  
  34. API_TYPE short MatMatch1to1(
  35.     unsigned char  *i_sbt,    
  36.     unsigned char  *i_fbt,    
  37.     const MatMode  i_mat_mode,
  38.     MatResult      *o_chart,  
  39.     unsigned short *o_score    
  40. );
  41.  

Y en C# lo que llevo:

Código: Text
  1. public struct MatMinu
  2.         {
  3.             public int MNO;
  4.             public int X;  
  5.             public int Y;  
  6.             public int D;  
  7.         }
  8.  
  9.         public struct MatPair
  10.         {
  11.             public MatMinu sminu;    
  12.             public MatMinu fminu;    
  13.         }
  14.  
  15.         public struct MatAffin
  16.         {
  17.             public int x;
  18.             public int y;
  19.             public int d;
  20.         }
  21.  
  22.         public enum MatCoreIndex
  23.         {
  24.             eMatCore_A = 0,
  25.             eMatCore_B = 1,
  26.             eMatCore_C = 2,
  27.             eMatCore_D = 3,
  28.             eMatCore_Max = 4
  29.         }
  30.  
  31.         public struct MatSubResult
  32.         {
  33.             public MatPair mat_chartinfo_a;  
  34.             public MatPair mat_chartinfo_z;
  35.             public int mat_similitude;    
  36.             public MatAffin mat_affinfactor;                
  37.             public short mat_score;                    
  38.             public short mat_status;                    
  39.         }
  40.         public struct MatResult
  41.         {
  42.             public MatSubResult mat_res;
  43.         }
  44.       
  45.  [DllImport("Match.dll", EntryPoint = "MatMatch1to1", SetLastError = true,
  46.                 CharSet = CharSet.Unicode, ExactSpelling = true,
  47.                CallingConvention = CallingConvention.StdCall)]
  48.         public static extern short MatMatch1to1(
  49.                char* i_sbt,      
  50.                char* i_fbt,    
  51.                MatMode i_mat_mode,  
  52.                out MatResult o_chart,    //MatResult*
  53.                ref short o_score    
  54.          );
  55.  

En el Form1 de C# :

Código: Text
  1.  const int MAT_CHART_MAX = 192;
  2.  
  3.         public MatPair[] mat_chartinfo_a;
  4.         public MatPair[] mat_chartinfo_z;
  5.         public int[] mat_similitude;
  6.         public MatSubResult[] mat_res;
  7.         public MatResult mat_result;
  8.  

Y cuando llamo a la funcion(hay otras cosas en esta funcion que omití porq funcionan bien):

Código: Text
  1. mat_st = MatMatch1to1((char*)min1, (char*)min2, mat_mode, out mat_result, ref mat_score);
  2.  

Ahora Mi Duda: Esto me compila, pero la DLL no me retorna los valores que debiera en mat_result.

Algo estaré haciendo mal?, o hay algo que se me olvido hacer o no está bien como lo estoy haciendo?...

Muchisimas gracias.

221
C# / Re: Combos En El Datagridview
« en: Jueves 3 de Mayo de 2007, 16:43 »
No se si DataGridViewComboBoxCell celdaDescrip tiene la opcion de text.

Me refiero a esto:

Código: Text
  1.  celdaDescrip.Text = "Esto quiero ingresar";
  2.  

Revisa bien esa opción.

222
C# / Re: Control De Errores
« en: Jueves 3 de Mayo de 2007, 16:40 »
Al usar Try - Catch, el programa al encontrar una excepcion salta directamente donde está el Catch y no permite saber que fue lo que sucedio a menos de que crees una variable para dicha excepcion.

Puede que esto te ayude en el CATCH:

Código: Text
  1. catch (Exception ex)
  2. {
  3. MessageBox.Show("Error : " + ex, "Este es el Error");
  4. }
  5.  
  6.  

La variable "ex" corresponde al error y deberia indicar la línea en un MessageBox, junto con su descripción.

Si no, intenta ejecutar el programa sin el Try Catch, y en modo depuración se detendrá automáticamente.

223
C# / Re: Obtener Valor Al Que Apunta Un Puntero
« en: Viernes 27 de Abril de 2007, 22:46 »
Lo logré, fue un parto mental con la ayuda de un compañero:

Lalo tienes razon, tiene un largo fijo, pero si lo asignas como arreglo, puedes manejar tu el tamaño.

Código: Text
  1. unsigned char variable [valor_entero];
  2.  

Código: Text
  1. arreglo = new byte[(int)largo_variable_char];
  2.  
  3.                         for (int i = 0; i < (int)largo_variable_char - 1; i = i + 2)
  4.                         {
  5.                             arreglo[i] = (byte)(*variable_char & 0x00ff);
  6.                             arreglo[i + 1] = (byte)((*variable_char & 0xff00) >> 8);
  7.                             variable_char++;
  8.                         }
  9.  
  10.  

Lo dejo por si a alguien le sirve.

La gracia es que la dll devuelve un valor de 8 bits y char es de 16 bits, asi que lo maneje como bytes. Y ademas en cada valor guardado del arreglo de unsigned char guarda 2 valores por lo cual se enmascara y se obtiene solo el valor que se desea. Luego se corre 8 bits.

Grax.

224
C# / Re: Obtener Valor Al Que Apunta Un Puntero
« en: Jueves 26 de Abril de 2007, 18:59 »
No conozco la definición de managed o unmanaged. Solo se que está realizada en C++ y que la llamo mediante DLLImport (para lo cual recibi mucha ayuda de JuanK).

La DLL me retorna el valor de un puntero que apunta a la dirección donde comienza del valor que deseo rescatar.

La DLL lee valores mediante punteros y los escribe tambien. Y como te expliqué le envio y recibo respuesta sin problemas.

Lo que debo rescatar es un unsigned char de largo variable. Me retorna dicho puntero y tambien el largo.

225
C# / Obtener Valor Al Que Apunta Un Puntero
« en: Jueves 26 de Abril de 2007, 16:28 »
Creo que ya se ha visto que estoy trabajando con DLL's y en una de las funciones para obtener un valor a través de una DLL debo enviar un puntero de un arreglo de bytes de tamaño variable.

Yo solo obtengo la dirección donde apunta, pero me gustaria poder obtener el valor que me muestra, veo los metodos tradicionales y no me funciona en teoría, puede que esté haciendo algo mal yo o quizás estoy equivocado en el concepto.

Pero alguien me podría explicar como obtener el valor de que está almacenado en una dirección de memoria?.

En la funcion existe un char que es puntero y quiero asignarle el valor que almacena a un arreglo de char.

Muchas gracias.

Páginas: 1 ... 7 8 [9] 10 11 ... 13