|
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 ... 8 9 [10] 11 12 13
226
« en: Miércoles 25 de Abril de 2007, 18:15 »
Gracias, me porporcionaron un codigo parecido que utiliza las funciones que yo utilizo pero en Visual C++, ahora ejecuto ambos programas y puedo revisar los valores que estan en cada una de las funciones. Uno de los problemas de los que me he percatado, es que en C++ un valor unsigned char pasando asignado con "malloc" (con lo cual se puede decir que es parecido a char[] en C#), muestra perfectamente los valores del archivo RAW con los que trabajo, mientras que en C# no he podido dar con lo mismo, o siemplemente al pasar los valores de Byte[] a Char[], creo que mi inquietud pasa por poder enviarle solo un char con todos los valores, lo que pasa a la funcion es el valor en byte y su referencia en ASCII, y solo quiero la referencia en ASCII. En C++ var = (unsigned char *)malloc(200000);
En C# char*[] var = new char*[200000];
o char* var = stackalloc char[200000];
Esas son mis dudas, porque la segunda opcion no me permite asignarle el RAW que estoy capturando, que por funcion debe estar en byte[] Y ese valor es fundamental el evaluar las otras expresiones.
227
« en: Martes 24 de Abril de 2007, 21:38 »
La llamada a la DLL [DllImport("Bimcot.dll", EntryPoint = "Bim_FIStoFMP5", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] public static extern int Bim_FIStoFMP5( Bim_Mode* bim_mode, out FisCore i_a_axis, out FisQuality i_qu, FisMinutiaNo* i_mno, char[] i_zdata, Bim_ZoneFormat i_format, char[] i_mpart, char* o_fmp5, int* o_fmp5_len, Bim_DataError* bim_data_error );
La declaracion de las variables char texto = '\0'; Bim_Mode bim_mode2; bim_mode2.acm_db_tpye = AcmDbType.ACM_DB_TYPE_RDB_L; bim_mode2.bim_limit = Bim_Limit.eBimLimitYes; bim_mode2.num_limit = 63; bim_mode2.key_list = &texto; bim_mode2.key_list_len = 0; bim_mode2.bim_clear = Bim_Clear.eBimClearBCD_AxisYes; bim_mode2.bim_check = Bim_Check.eBimCheckNo; FisCore o_core; FisQuality o_qu; FisMinutiaNo o_mno; char[] o_zdata = new char[256]; /* fix size */ char[] o_mpart = new char[16*256]; /* fix size */ Bim_ZoneFormat i_format = new Bim_ZoneFormat(); i_format = Bim_ZoneFormat.eBimZoneFormat_32x32_2bit; char o_fmp52; int o_fmp5_len2; Bim_DataError bim_data_error2 = new Bim_DataError();
La llamada a la funcion: int h = Bim_FIStoFMP5(&bim_mode2, out o_core, out o_qu, &o_mno, o_zdata, i_format, o_mpart, &o_fmp52, &o_fmp5_len2, &bim_data_error2);
El resto son los tipos o sea STRUCT y ENUM que estan igual como los colocaste Tu en el codigo que pusiste. Aunque habian cosas que faltaban de las que no me habia percatado.
228
« en: Martes 24 de Abril de 2007, 21:19 »
Al final logré que funcionara, pero si no hubiera sido por Ti, creo que no lo habría logrado. Muchas gracias JuanK por toda tu ayuda.
229
« en: Martes 24 de Abril de 2007, 21:11 »
Hola Amigos y sobretodo a JuanK que si no fuera por toda su ayuda, no habria logrado en todo lo que voy.
Hice un programa en C# que toma funciones de una DLL, y las debe ejecutar.
Al fin, son 3 DLL que llama pero 2 que son compatibles o sea, las variables que manejan, se comunican.
Pero al compilar y al llamar a una determinada funcion que retorna un tipo long simplemente se cae y se cierra.
Una vez generado (compilado), con el depurador no alcanzo a ver que está pasando ni aunque coloque un punto de interrupción, simplemente se cae antes.
Ahora mi consulta, como puedo saber lo que está sucediendo entre la DLL y el programa en C#???..
Muchas gracias.
230
« en: Martes 24 de Abril de 2007, 18:18 »
Hazlo en Diseño, no por codigo.
Verás que al moverte por el menú irán apareciendo espacios vacios que corresponden al lugar en donde quieres insertar un nuevo elemento.
Luego solo debes asignarle un nombre.
La otra opcion es que en el modo grafico, agregues un nuevo componente con el boton derecho, este te da varias alternativas.
231
« en: Martes 24 de Abril de 2007, 18:15 »
Esta sección del foro está orientada a C# no C++.
232
« en: Lunes 23 de Abril de 2007, 16:10 »
Imagen es una imágen obtenida de un dispositivo.
Claro que ese "Imagen" es una imagen en RAW, por lo que en C# se trabaja como un byte[78000].
Voy a hacerle un cast o alguna transformación para poder obtenerlo en Char. y asi probare tu codigo.
El mio compilaba, pero al ejecutar en enviaba valores errados o me indicaba:
"La firma no es compatible con interoperabilidad en el parametro 8"
//////////////////////////////////////////////////
Nuevo Error:
"No se puede calcular la referencia de 'parameter #8': No se admite el calculo para matrices anidadas.
//////////////////////////////////////////////////
Y si cambio el char[][] por char[] me envia el siguiente error:
"Intento de leer o escribir en la memoria protegida. A menudo, esto indica que hay otra memoria dañada."
Ya tengo convertido el byte[] a char[]
///////////////////////////////////////////////////
No se con cual mensaje estoy mas cerca de la solucion.
Y curiosamente, hay una funcion que muestra la version, que debiera mostrar un char, pero al colocarla como string funciona a la perfección.
233
« en: Viernes 20 de Abril de 2007, 21:07 »
Me dice que debe tener un valor dentro de los corchetes. De las siguiente forma no me reclama Viste mi llamada a funcion?, como crees que estaba, me compila bien, pero quiza pueda haber un error de ejecución. Muchas gracias.
234
« en: Viernes 20 de Abril de 2007, 18:57 »
Y si eso es equivalente: Como hago para poder hacer una referencia a una cadena byte[] Y Que piensas del resto del codigo y como ves la llamada a la función?. Y en el fixed debe ser byte, porq lo que ingresa es un arreglo de bytes. Si no no me permite asignar el byte[0].
235
« en: Viernes 20 de Abril de 2007, 16:41 »
Hola JuanK, ya le agregue las cosas que me decias, pero la llamada a la funcion me indica "La firma no es compatible con interoperabilidad en el parametro 8" y no evalua nada mas. La funcion que estoy utilizando es la siguiente: Bim_FIStoFMP5(bim_mode2, &i_a_axis2, &i_qu2, &i_mno2, i_zdata2, i_format, i_impart2, o_fmp52, o_fmp5_len2, bim_data_error2);
Y las declaraciones de variables son, ya que esas son las declaraciones y valores que deben llevar por defecto para que se incialize: unsafe { char texto = '\0'; Bim_Mode bim_mode2; bim_mode2.acm_db_tpye = AcmDbType.ACM_DB_TYPE_RDB_L; bim_mode2.bim_limit = Bim_Limit.eBimLimitYes; bim_mode2.num_limit = 63; bim_mode2.key_list = &texto; bim_mode2.key_list_len = 0; bim_mode2.bim_clear = Bim_Clear.eBimClearBCD_AxisYes; bim_mode2.bim_check = Bim_Check.eBimCheckNo; try{ void* i_a_axis2, i_qu2, i_mno2; byte*[] i_impart2; Bim_ZoneFormat i_format = new Bim_ZoneFormat(); i_format = Bim_ZoneFormat.eBimZoneFormat_32x32_2bit; char**[] o_fmp52; int*[] o_fmp5_len2; i_impart2 = new byte*[1600]; o_fmp5_len2 = new int*[10]; o_fmp52 = new char**[1600]; Bim_DataError bim_data_error2 = new Bim_DataError(); fixed (byte* i_zdata2 = &imagen[0]) { Bim_FIStoFMP5(bim_mode2, &i_a_axis2, &i_qu2, &i_mno2, i_zdata2, i_format, i_impart2, o_fmp52, o_fmp5_len2, bim_data_error2); } } catch (Exception e) { MessageBox.Show("Error = " + e, "Error de parametro"); } }
Debi cambiar variables char por byte, ya que asi me es posible trabajar con los unsigned char y la llamada a DllImport me quedó de la siguiente manera, tambien le cambie el tipo bool por int, ya que me retorna un valor entero o -1. [DllImport("Bimcot.dll", EntryPoint = "Bim_FIStoFMP5", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] public static extern int Bim_FIStoFMP5( Bim_Mode bim_mode, void* i_a_axis, void* i_qu, void* i_mno, byte* i_zdata, Bim_ZoneFormat i_format, byte*[] i_mpart, char**[] o_fmp5, int*[] o_fmp5_len, Bim_DataError bim_data_error );
También debi agregar un enum, o sea ingresar esos datos: public enum AcmDbType : long { ACM_DB_TYPE_RDB_T = 0x01, ACM_DB_TYPE_RDB_L = 0x02, ACM_DB_TYPE_LDB = 0x04, ACM_DB_TYPE_EXTRA = 0x08, ACM_DB_TYPE_SDBL = 0x10, ACM_DB_TYPE_MAX = 5, }
Muchas gracias por las molestias. Atte.
236
« en: Viernes 20 de Abril de 2007, 04:59 »
Muchisimas gracias, ahora vengo recien llegando, asi que mañana te cuento, mucho trabajo.
Te pasaste, insisto, muchisimas gracias.
237
« en: Jueves 19 de Abril de 2007, 15:44 »
Ok... esto me tiene afligido.
238
« en: Miércoles 18 de Abril de 2007, 23:57 »
JuanK en otra discusion explico eso mismo, haciendo llamadas a funciones. Discusión
239
« en: Miércoles 18 de Abril de 2007, 23:28 »
Explicate a que le llamas instancia.
240
« en: Miércoles 18 de Abril de 2007, 18:00 »
Puedes imprimir a través del servicio de Windows: using System.Drawing; using System.Drawing.Printing;
public static PrintDocument Imprimir = new PrintDocument();
private static void Imprimir_PrintPage(Object sender, PrintPageEventArgs e) { Font fuente_de_texto = new Font("Courier New", 12); e.Graphics.DrawString(texto_a_imprimir, fuente_de_texto, Brushes.Black, 0, 0); }
Debes pasarle como variable imp el texto en modo STRING para que lo imprima. Si necesitas un salto de linea agrega al texto de la siguiente manera: imp = imp + "\n";
public static void imprime(string imp) { try { texto_a_imprimir = imp; Imprimir.PrintPage += new PrintPageEventHandler(Imprimir_PrintPage); Imprimir.Print(); } catch (Exception e) { MessageBox.Show("Error." + e, "Error"); } }
Debes obtener el texto de alguna parte, junta los datos que obtienes en el form, en un solo STRING.
241
« en: Martes 17 de Abril de 2007, 16:04 »
Ya te envie la DLL, ahora espero que te llegue de manera correcta, ya que no la envie como ZIP ni como RAR, avisame, gracias
242
« en: Lunes 16 de Abril de 2007, 21:46 »
Muchisimas gracias JuanK, sabes, se me olvido un detalle en el codigo, y es que los 7 primeros parámetros son de entrada (in) y los 3 ultimos de salida (out). Y muchas gracias nuevamente
243
« en: Lunes 16 de Abril de 2007, 21:29 »
Nadie me puede responder?, se que he molestado mucho con este tema, pero no he podido solucionarlo.
244
« en: Jueves 12 de Abril de 2007, 17:41 »
Necesito su ayuda, he intendado 1000 formas de poder usar esto, y no hay caso, no comprendo bien aun esa funcion y esta el la funcion que debo llamar de una dll, por favor si alguien me puede decir como hacerlo: FUNCION_TYPE int Convertir( Mode_pr *mode, void *eje, void *cantidad, void *inicio, unsigned char *info, ZoneFormat_pr formato, unsigned char *partes, unsigned char **retorno, int *largo, DataError_pr *error );
Este codigo pertenece al header (*.h) de la DLL y es lo unico que deseo ejecutar. Prefiero hacer todo el codigo nuevamente, lo que son los struct y enum los tengo bien declarados, pero mis dudas son los punteros * los void y parametros de regreso los que son los unsigned char. Me pueden de decir como declarar las variables en C#, como usar el dllimport para ese codigo y como llamar la funcion?. Por favor, disculpen lo cara dura, pero no encuentro la solucion. Muchisimas gracias.
245
« en: Miércoles 11 de Abril de 2007, 17:40 »
Holas y nuevamente gracias. Tengo unas DLL para utilizar, estoy probando varios metodos, y uno que me resulto bastante curioso, fue el de crear una copia de una dll, para que sea compatible con COM. El metodo es el siguiente utilizando tlbimp.exe en cmd: tlbimp dllantigua.dll /out: nombre_nueva_dll.dll
Me pareció un sueño, lo hice con la dll que debo trabajar y la agregue de una manera muy fácil. Agregandola en referencias, cosa que no me produjo problemas y luego. Despues solo declare e inicialize las variables usando las propiedades que me muestra el Examinador de objetos. Pero me surgio un problema. Debia crear funciones que enlazaran esas DLL con otras, ya que solo eran de vinculacion y no pude transformar de la misma forma las DLL importantes. Agrege todas esas lineas a mi codigo y listo, compiló perfectamente. Ahora viene el problema. Al llegar a la linea donde se inicializa la funcion de la DLL, me envia un error: Error al recuperar un generador de clases COM para el componente con CLSID {D5725239-8C87-4E66-BB33-6640C2D00DB8} debido al siguiente error: 80040154.
Y eso nose como solucionarlo. La opcion que estoy barajando es crear la DLL original nuvamente, ya que poseo los *.h y los *.lib, pero nose como hacerlo. El método para agregar una dll externa me ha producido 1000 y un problemas. Espero su ayuda, muchas gracias.
246
« en: Martes 10 de Abril de 2007, 20:24 »
Al realizar ese cambio me envia un error:
Intento de leer o escribir en la memoria protegida. A menudo esto indica que hay otra memoria dañada.
247
« en: Martes 10 de Abril de 2007, 18:09 »
Es asi: [DllImport("dll.dll")] public unsafe static extern int funcion_externa(modo tipo_modo, Byte[] dato1, formato tipo_formato, void valor,Byte[] objeto,out Byte*[] dato_de_vuelta,out int* largo_dato,out Error* tipo_error);
Declaro cada uno de los parametros y esta es mi llamada a la funcion dentro de unsafe: funcion_externa(modo tipo_modo, dato1, tipo_formato, objeto,out dato_de_vuelta,out largo_dato, out tipo_error);
Estoy omitiendo el VOID en los 2 ejemplos, arriba solo lo puse como debería ir en el codigo. Por lo que he averiguado los miembros VOID no se declaran, asi que opté por omitirlos, pero aun no me funciona la llamada, porque cuando llamo a la funcion me envia otro error en el ultimo parametro: "No se puede calcular la referencia de 'parameter #7: Los punteros no pueden hacer referencia a estructuras con referencias calculadas. Utilice ByRef en su lugar."
248
« en: Lunes 9 de Abril de 2007, 22:58 »
Quise postear en esta misma discusión, ya que tengo un problema con los miembros VOID al exportar una DLL, ya que el compilador me dice :
"El parámetro void no es válido".
Entonces que hago para declarar esas variables?.
249
« en: Domingo 1 de Abril de 2007, 03:23 »
Buenas y nuevamente muchas gracias por su ayuda, pero me surgió otro problema.
Tomo datos de una base de datos, los guardo en un XML y luego los represento en un DataGrid, ahora lo que deseo realizar es colocar esos datos del DataGrid en otra base de datos que no posee la misma estructura. Como puedo hacerlo?.
Muchas gracias por toda su ayuda.
250
« en: Jueves 29 de Marzo de 2007, 04:24 »
No se lo que es un DTS, y me gustaria pasarla a CVS o TXT, pero mi conflicto son los datos binarios. Son Imágenes *.RAW, que las puedo manejar como cadena de bytes.
Páginas: 1 ... 8 9 [10] 11 12 13
|
|
|