|
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
« en: Miércoles 9 de Mayo de 2007, 21:29 »
Y al final se pueden crear punteros a tipos administrados???? o struct administrados????
202
« 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
« 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
« 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
« 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
« 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: public class prueba { public tipo1[] var1 = new tipo1[4]; public tipo2 var2; } public struct tipo1 { public tipo4[] var4; //Acá no puedo declarar tamaño y si lo hago afuera, // tampoco lo acepta, o sea compila, pero no ejecuta la accion de asignar memoria } public struct tipo2 { public int algo; } public struct tipo 4 { public char otro;//No se ve desde la clase, con struct si, pero //necesito el struct con tamaño definido }
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
« 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. //ESTO NO ES VALIDO public struct MatMinu { public int MNO; public int X; public int Y; public int D; } public struct MatPair { public MatMinu sminu; public MatMinu fminu; } public struct MatAffin { public int x; public int y; public int d; } public enum MatCoreIndex { eMatCore_A = 0, eMatCore_B = 1, eMatCore_C = 2, eMatCore_D = 3, eMatCore_Max = 4 } public struct MatSubResult { //ESTO NO ES VALIDO, SOLO ES LO QUE DESEO HACER public MatPair[] mat_chartinfo_a = new MatPair[MAT_CHART_MAX ]; //ESTO NO ES VALIDO, SOLO ES LO QUE DESEO HACER public MatPair[] mat_chartinfo_z = new MatPair[MAT_CHART_MAX ]; //ESTO NO ES VALIDO, SOLO ES LO QUE DESEO HACER public int[] mat_similitude = new MatPair [MAT_CHART_MAX]; public MatAffin mat_affinfactor; public short mat_score; public short mat_status; } public struct MatResult { //ESTO NO ES VALIDO, SOLO ES LO QUE DESEO HACER public MatSubResult[] mat_res = new MatSubResult[(int)MatCoreIndex.eMatCore_Max]; }
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: public class MatResult { public MatSubResult[] mat_res = new MatSubResult[(int)MatCoreIndex.eMatCore_Max]; }
Pero eso no me permite acceder mas alla de MatSubResult.
208
« 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
« 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
« 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
« 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
« 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
« en: Viernes 4 de Mayo de 2007, 23:15 »
Y otra duda : Como se crea esto en C#? typedef struct { MatPair mat_chartinfo_a[MAT_CHART_MAX]; MatPair mat_chartinfo_z[MAT_CHART_MAX]; int mat_similitude[MAT_CHART_MAX]; MatAffin mat_affinfactor; unsigned short mat_score; short mat_status; } MatSubResult;
Teniendo en cuenta:
214
« en: Viernes 4 de Mayo de 2007, 20:33 »
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: this.picturebox.Image = new Bitmap(@"\dibujo.bmp"); this.pictureBox.Image = Image.FromFile(@"c:\CsharpStudio\imgFondo.bmp");
También sirve, asi omite el caracter de escape.
215
« 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" CharSet=CharSet.Ansi CharSet=CharSet.Auto CharSet=CharSet.None
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
« 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
« 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
« 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
« 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: Suerte.
220
« 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) #define MAT_CHART_MAX 192 typedef enum { eMatCore_A = 0, eMatCore_B = 1, eMatCore_C = 2, eMatCore_D = 3, eMatCore_Max = 4 } MatCoreIndex; typedef struct { MatMinu sminu; MatMinu fminu; } MatPair; typedef struct { int x; int y; int d; } MatAffin; typedef struct { MatPair mat_chartinfo_a[MAT_CHART_MAX]; MatPair mat_chartinfo_z[MAT_CHART_MAX]; int mat_similitude[MAT_CHART_MAX]; MatAffin mat_affinfactor; unsigned short mat_score; short mat_status; } MatSubResult; typedef struct { MatSubResult mat_res[eMatCore_Max]; } MatResult; API_TYPE short MatMatch1to1( unsigned char *i_sbt, unsigned char *i_fbt, const MatMode i_mat_mode, MatResult *o_chart, unsigned short *o_score );
Y en C# lo que llevo: public struct MatMinu { public int MNO; public int X; public int Y; public int D; } public struct MatPair { public MatMinu sminu; public MatMinu fminu; } public struct MatAffin { public int x; public int y; public int d; } public enum MatCoreIndex { eMatCore_A = 0, eMatCore_B = 1, eMatCore_C = 2, eMatCore_D = 3, eMatCore_Max = 4 } public struct MatSubResult { public MatPair mat_chartinfo_a; public MatPair mat_chartinfo_z; public int mat_similitude; public MatAffin mat_affinfactor; public short mat_score; public short mat_status; } public struct MatResult { public MatSubResult mat_res; } [DllImport("Match.dll", EntryPoint = "MatMatch1to1", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] public static extern short MatMatch1to1( char* i_sbt, char* i_fbt, MatMode i_mat_mode, out MatResult o_chart, //MatResult* ref short o_score );
En el Form1 de C# : const int MAT_CHART_MAX = 192; public MatPair[] mat_chartinfo_a; public MatPair[] mat_chartinfo_z; public int[] mat_similitude; public MatSubResult[] mat_res; public MatResult mat_result;
Y cuando llamo a la funcion(hay otras cosas en esta funcion que omití porq funcionan bien): mat_st = MatMatch1to1((char*)min1, (char*)min2, mat_mode, out mat_result, ref mat_score);
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
« en: Jueves 3 de Mayo de 2007, 16:43 »
No se si DataGridViewComboBoxCell celdaDescrip tiene la opcion de text. Me refiero a esto: celdaDescrip.Text = "Esto quiero ingresar";
Revisa bien esa opción.
222
« 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: catch (Exception ex) { MessageBox.Show("Error : " + ex, "Este es el Error"); }
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
« 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. unsigned char variable [valor_entero];
arreglo = new byte[(int)largo_variable_char]; for (int i = 0; i < (int)largo_variable_char - 1; i = i + 2) { arreglo[i] = (byte)(*variable_char & 0x00ff); arreglo[i + 1] = (byte)((*variable_char & 0xff00) >> 8); variable_char++; }
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
« 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
« 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
|
|
|