• Domingo 22 de Diciembre de 2024, 08:09

Autor Tema:  Cansado De Dllimport  (Leído 4001 veces)

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Cansado De Dllimport
« en: Jueves 12 de Abril de 2007, 17:41 »
0
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:

Código: Text
  1.  
  2.  
  3. FUNCION_TYPE int Convertir(
  4.     Mode_pr      *mode,      
  5.     void           *eje,      
  6.     void           *cantidad,          
  7.     void           *inicio,          
  8.     unsigned char  *info,        
  9.     ZoneFormat_pr formato,        
  10.     unsigned char  *partes,        
  11.     unsigned char  **retorno,      
  12.     int            *largo,    
  13.     DataError_pr  *error  
  14. );
  15.  
  16.  
  17.  

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.
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Re: Cansado De Dllimport
« Respuesta #1 en: Lunes 16 de Abril de 2007, 21:29 »
0
Nadie me puede responder?, se que he molestado mucho con este tema, pero no he podido solucionarlo.

 :comp:
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Cansado De Dllimport
« Respuesta #2 en: Lunes 16 de Abril de 2007, 21:41 »
0
no he tenido tiempo para revisarlo, tratare de hacerlo una de estas noches.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Re: Cansado De Dllimport
« Respuesta #3 en: Lunes 16 de Abril de 2007, 21:46 »
0
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

 :D
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Cansado De Dllimport
« Respuesta #4 en: Martes 17 de Abril de 2007, 03:45 »
0
bueno comencemos con que me envias la dll a mi correo please.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Re: Cansado De Dllimport
« Respuesta #5 en: Martes 17 de Abril de 2007, 16:04 »
0
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
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Cansado De Dllimport
« Respuesta #6 en: Jueves 19 de Abril de 2007, 14:45 »
0
me puedes enviar por favor el .h.

hablamos.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Re: Cansado De Dllimport
« Respuesta #7 en: Jueves 19 de Abril de 2007, 15:44 »
0
Ok... esto me tiene afligido.
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Cansado De Dllimport
« Respuesta #8 en: Viernes 20 de Abril de 2007, 04:07 »
0
Tentativamente esta es la manera aproximada, ya tu le colocas el maquillaje de lo de struct layout y esas cosas,  para que compile debes habilitar en las propiedades del proyecto el check box de permitir código inseguro.

Código: Text
  1. using System;
  2. using System.Runtime.InteropServices;
  3.  
  4. namespace DllImportApp
  5. {
  6.     unsafe class Program
  7.     {
  8.         public struct Bim_DataError
  9.         {
  10.             public Bim_DataErrorType bim_data_error_type;
  11.             public char* bim_data_error_explain;
  12.         }
  13.  
  14.         public enum Bim_DataErrorType
  15.         {
  16.             BimDataError_NOTHING        =   0,
  17.             BimDataError_AXIS_QUALITY   = (-1),
  18.             BimDataError_AXIS_RANGE     = (-2),
  19.             BimDataError_NUM_OF_MINUTIA = (-3),
  20.             BimDataError_ZONE_LENGTH    = (-4),
  21.             BimDataError_MINUTIA_QUALITY= (-5),
  22.             BimDataError_MINUTIA_RANGE  = (-6),
  23.             BimDataError_MINUTIA_RIDGE  = (-7),
  24.             BimDataError_MINUTIA_NUMBER = (-8),
  25.             BimDataError_STOPPER        = (-9),
  26.             BimDataError_OTHER          = (-10),
  27.             BimDataError_ZONE_ADJUST    = (-11)
  28.         }
  29.  
  30.  
  31.         public enum Bim_Check
  32.         {
  33.             eBimCheckNo,  
  34.             eBimCheckYes,  
  35.             eBimCheckMax
  36.         }
  37.         public enum Bim_Clear
  38.         {
  39.             eBimClearBCD_AxisNo,
  40.             eBimClearBCD_AxisYes,
  41.             eBimClearBCD_AxisMax
  42.         }
  43.  
  44.         public enum  Bim_Limit
  45.         {
  46.             eBimLimitNo,
  47.             eBimLimitYes,
  48.             eBimLimitMax
  49.         }
  50.  
  51.         public enum AcmDbType:long{}
  52.  
  53.         public struct Bim_Mode
  54.         {
  55.             public AcmDbType acm_db_tpye;
  56.             public Bim_Limit bim_limit;
  57.             public int num_limit;
  58.             public char* key_list;
  59.             public int key_list_len;
  60.             public Bim_Clear bim_clear;
  61.             public Bim_Check bim_check;    
  62.         }
  63.  
  64.         public enum Bim_ZoneFormat
  65.         {
  66.             eBimZoneFormat_32x32_1bit = 1,  
  67.             eBimZoneFormat_32x32_2bit = 2,  
  68.             eBimZoneFormat_32x32_8bit = 3,  
  69.             eBimZoneFormat_40x32_1bit = 4,  
  70.             eBimZoneFormat_40x32_2bit = 5,  
  71.             eBimZoneFormat_40x32_8bit = 6,  
  72.             eBimZoneFormat_Max        = 7
  73.         }
  74.  
  75.         [DllImport("Bimcot.dll", EntryPoint = "Bim_FIStoFMP5", SetLastError = true,
  76.                          CharSet = CharSet.Unicode, ExactSpelling = true,
  77.                         CallingConvention = CallingConvention.StdCall)]
  78.         public static extern bool Bim_FIStoFMP5(
  79.                 Bim_Mode       bim_mode,    
  80.                 void*          i_a_axis,      
  81.                 void*          i_qu,          
  82.                 void*          i_mno,          
  83.                 char*          i_zdata,        
  84.                 Bim_ZoneFormat i_format,        
  85.                 char*          i_mpart,
  86.                 char**         o_fmp5,        
  87.                 int*           o_fmp5_len,    
  88.                 Bim_DataError  bim_data_error  
  89.             );
  90.  
  91.         static void Main(string[] args)
  92.         {
  93.             Console.WriteLine("usar el metodo");
  94.         }
  95.     }
  96. }
  97.  
  98.  


Ya tu sabras para que y como necesitas llamar el metodo, pues dale y cualquier cosa me cuentas y lo seguimos trabajando.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Re: Cansado De Dllimport
« Respuesta #9 en: Viernes 20 de Abril de 2007, 04:59 »
0
Muchisimas gracias, ahora vengo recien llegando, asi que mañana te cuento, mucho trabajo.

Te pasaste, insisto, muchisimas gracias.
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Re: Cansado De Dllimport
« Respuesta #10 en: Viernes 20 de Abril de 2007, 16:41 »
0
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:

Código: Text
  1. 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);
  2.  

Y las declaraciones de variables son, ya que esas son las declaraciones y valores que deben llevar por defecto para que se incialize:

Código: Text
  1.       unsafe
  2.                 {
  3.                     char texto = '\0';
  4.                    
  5.                     Bim_Mode bim_mode2;
  6.                     bim_mode2.acm_db_tpye = AcmDbType.ACM_DB_TYPE_RDB_L;
  7.                     bim_mode2.bim_limit = Bim_Limit.eBimLimitYes;
  8.                     bim_mode2.num_limit = 63;
  9.                     bim_mode2.key_list = &texto;
  10.                     bim_mode2.key_list_len = 0;
  11.                     bim_mode2.bim_clear = Bim_Clear.eBimClearBCD_AxisYes;
  12.                     bim_mode2.bim_check = Bim_Check.eBimCheckNo;
  13.                    
  14.                     try{
  15.                         void* i_a_axis2, i_qu2, i_mno2;
  16.                         byte*[] i_impart2;
  17.                         Bim_ZoneFormat i_format = new Bim_ZoneFormat();
  18.                         i_format = Bim_ZoneFormat.eBimZoneFormat_32x32_2bit;
  19.                         char**[] o_fmp52;
  20.                         int*[] o_fmp5_len2;
  21.                         i_impart2 = new byte*[1600];
  22.                         o_fmp5_len2 = new int*[10];
  23.                         o_fmp52 = new char**[1600];
  24.                         Bim_DataError bim_data_error2 = new Bim_DataError();
  25.  
  26.                         fixed (byte* i_zdata2 = &imagen[0])
  27.                         {
  28.                             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);
  29.                         }
  30.                     }
  31.                     catch (Exception e)
  32.                     {
  33.                         MessageBox.Show("Error = " + e, "Error de parametro");
  34.                     }
  35.  
  36.                 }
  37.  
  38.  

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.

Código: Text
  1.         [DllImport("Bimcot.dll", EntryPoint = "Bim_FIStoFMP5", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
  2.         public static extern int Bim_FIStoFMP5(
  3.                 Bim_Mode bim_mode,
  4.                 void* i_a_axis,
  5.                 void* i_qu,
  6.                 void* i_mno,
  7.                 byte* i_zdata,
  8.                 Bim_ZoneFormat i_format,
  9.                 byte*[] i_mpart,
  10.                 char**[] o_fmp5,
  11.                 int*[] o_fmp5_len,
  12.                 Bim_DataError bim_data_error
  13.             );
  14.  

También debi agregar un enum, o sea ingresar esos datos:

Código: Text
  1. public enum AcmDbType : long
  2.           {
  3.             ACM_DB_TYPE_RDB_T = 0x01,
  4.             ACM_DB_TYPE_RDB_L = 0x02,
  5.             ACM_DB_TYPE_LDB = 0x04,
  6.             ACM_DB_TYPE_EXTRA = 0x08,
  7.             ACM_DB_TYPE_SDBL = 0x10,
  8.             ACM_DB_TYPE_MAX = 5,
  9.           }
  10.  

Muchas gracias por las molestias.

Atte.
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Cansado De Dllimport
« Respuesta #11 en: Viernes 20 de Abril de 2007, 18:55 »
0
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->       [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
           );<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->

revisa esas, no me convencen.

char en C# ya es por defecto unsigned puesto que no hay unsigned char, y byte para ser unsigned debe ser ubyte. Respecto a los punteros para el caso de
char**[]
eso es el equivalente a
char***

asi que pilas...
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Re: Cansado De Dllimport
« Respuesta #12 en: Viernes 20 de Abril de 2007, 18:57 »
0
Y si eso es equivalente:

Código: Text
  1. char*** a char**[]
  2.  

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].
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Cansado De Dllimport
« Respuesta #13 en: Viernes 20 de Abril de 2007, 19:32 »
0
Cita de: "Neopro"

Como hago para poder hacer una referencia a una cadena byte[]
 
byte*
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Re: Cansado De Dllimport
« Respuesta #14 en: Viernes 20 de Abril de 2007, 21:07 »
0
Me dice que debe tener un valor dentro de los corchetes.

De las siguiente forma no me reclama

Código: Text
  1. byte*[2000]
  2.  

Viste mi llamada a funcion?, como crees que estaba, me compila bien, pero quiza pueda haber un error de ejecución.

Muchas gracias.
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Cansado De Dllimport
« Respuesta #15 en: Sábado 21 de Abril de 2007, 23:42 »
0
ASI 'COMPILA'.

No e he hecho pruebas extensas no se que quieres guardar en imagen.

Código: Text
  1.     unsafe class Program
  2.     {
  3.         public struct Bim_DataError
  4.         {
  5.             public Bim_DataErrorType bim_data_error_type;
  6.             public char* bim_data_error_explain;
  7.         }
  8.  
  9.         public enum Bim_DataErrorType
  10.         {
  11.             BimDataError_NOTHING        =   0,
  12.             BimDataError_AXIS_QUALITY   = (-1),
  13.             BimDataError_AXIS_RANGE     = (-2),
  14.             BimDataError_NUM_OF_MINUTIA = (-3),
  15.             BimDataError_ZONE_LENGTH    = (-4),
  16.             BimDataError_MINUTIA_QUALITY= (-5),
  17.             BimDataError_MINUTIA_RANGE  = (-6),
  18.             BimDataError_MINUTIA_RIDGE  = (-7),
  19.             BimDataError_MINUTIA_NUMBER = (-8),
  20.             BimDataError_STOPPER        = (-9),
  21.             BimDataError_OTHER          = (-10),
  22.             BimDataError_ZONE_ADJUST    = (-11)
  23.         }
  24.  
  25.  
  26.         public enum Bim_Check
  27.         {
  28.             eBimCheckNo,  
  29.             eBimCheckYes,  
  30.             eBimCheckMax
  31.         }
  32.         public enum Bim_Clear
  33.         {
  34.             eBimClearBCD_AxisNo,
  35.             eBimClearBCD_AxisYes,
  36.             eBimClearBCD_AxisMax
  37.         }
  38.  
  39.         public enum  Bim_Limit
  40.         {
  41.             eBimLimitNo,
  42.             eBimLimitYes,
  43.             eBimLimitMax
  44.         }
  45.  
  46.         public enum AcmDbType : long
  47.         {
  48.             ACM_DB_TYPE_RDB_T = 0x01,
  49.             ACM_DB_TYPE_RDB_L = 0x02,
  50.             ACM_DB_TYPE_LDB = 0x04,
  51.             ACM_DB_TYPE_EXTRA = 0x08,
  52.             ACM_DB_TYPE_SDBL = 0x10,
  53.             ACM_DB_TYPE_MAX = 5,
  54.         }
  55.  
  56.         public struct Bim_Mode
  57.         {
  58.             public AcmDbType acm_db_tpye;
  59.             public Bim_Limit bim_limit;
  60.             public int num_limit;
  61.             public char* key_list;
  62.             public int key_list_len;
  63.             public Bim_Clear bim_clear;
  64.             public Bim_Check bim_check;    
  65.         }
  66.  
  67.         public enum Bim_ZoneFormat
  68.         {
  69.             eBimZoneFormat_32x32_1bit = 1,  
  70.             eBimZoneFormat_32x32_2bit = 2,  
  71.             eBimZoneFormat_32x32_8bit = 3,  
  72.             eBimZoneFormat_40x32_1bit = 4,  
  73.             eBimZoneFormat_40x32_2bit = 5,  
  74.             eBimZoneFormat_40x32_8bit = 6,  
  75.             eBimZoneFormat_Max        = 7
  76.         }
  77.  
  78.         [DllImport(&#34;Bimcot.dll&#34;, EntryPoint = &#34;Bim_FIStoFMP5&#34;, SetLastError = true,
  79.                          CharSet = CharSet.Unicode, ExactSpelling = true,
  80.                         CallingConvention = CallingConvention.StdCall)]
  81.         public static extern bool Bim_FIStoFMP5(
  82.                 Bim_Mode       bim_mode,    
  83.                 void*          i_a_axis,      
  84.                 void*          i_qu,          
  85.                 void*          i_mno,          
  86.                 char*          i_zdata,        
  87.                 Bim_ZoneFormat i_format,        
  88.                 char[]          i_mpart,
  89.                 char[][]         o_fmp5,        
  90.                 int[]           o_fmp5_len,    
  91.                 Bim_DataError  bim_data_error  
  92.             );
  93.  
  94.         static void Main(string[] args)
  95.         {
  96.             unsafe
  97.             {
  98.                 char texto = '&#092;0';
  99.  
  100.                 Bim_Mode bim_mode2;
  101.                 bim_mode2.acm_db_tpye = AcmDbType.ACM_DB_TYPE_RDB_L;
  102.                 bim_mode2.bim_limit = Bim_Limit.eBimLimitYes;
  103.                 bim_mode2.num_limit = 63;
  104.                 bim_mode2.key_list = &texto;
  105.                 bim_mode2.key_list_len = 0;
  106.                 bim_mode2.bim_clear = Bim_Clear.eBimClearBCD_AxisYes;
  107.                 bim_mode2.bim_check = Bim_Check.eBimCheckNo;
  108.  
  109.                 try
  110.                 {
  111.                     void* i_a_axis2, i_qu2, i_mno2;
  112.                     char[] i_impart2;
  113.                     Bim_ZoneFormat i_format = new Bim_ZoneFormat();
  114.                     i_format = Bim_ZoneFormat.eBimZoneFormat_32x32_2bit;
  115.                     char[][] o_fmp52;
  116.                     int[] o_fmp5_len2;
  117.                     i_impart2 = new char[1600];
  118.                     o_fmp5_len2 = new int[10];
  119.                     o_fmp52 = new char[1600][];
  120.                     Bim_DataError bim_data_error2 = new Bim_DataError();
  121.  
  122.                     char* i_zdata2 = null;
  123.                     /*fixed (char* i_zdata2 = &imagen[0])*/
  124.                     {
  125.                         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);
  126.                     }
  127.                 }
  128.                 catch (Exception e)
  129.                 {
  130.                     Console.WriteLine(&#34;Error = &#34; + e, &#34;Error de parametro&#34;);
  131.                 }
  132.  
  133.             }
  134.         }
  135.     }
  136.  
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Re: Cansado De Dllimport
« Respuesta #16 en: Lunes 23 de Abril de 2007, 16:10 »
0
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.
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Re: Cansado De Dllimport
« Respuesta #17 en: Martes 24 de Abril de 2007, 21:19 »
0
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.  :smartass:
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Cansado De Dllimport
« Respuesta #18 en: Martes 24 de Abril de 2007, 21:24 »
0
Y COMO QUEDO?
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Re: Cansado De Dllimport
« Respuesta #19 en: Martes 24 de Abril de 2007, 21:38 »
0
La llamada a la DLL
Código: Text
  1.        
  2. [DllImport(&#34;Bimcot.dll&#34;, EntryPoint = &#34;Bim_FIStoFMP5&#34;, SetLastError = true,
  3.                         CharSet = CharSet.Unicode, ExactSpelling = true,
  4.                        CallingConvention = CallingConvention.StdCall)]
  5.        public static extern int Bim_FIStoFMP5(
  6.                Bim_Mode*        bim_mode,    
  7.                out FisCore      i_a_axis,      
  8.                out FisQuality   i_qu,          
  9.                FisMinutiaNo*    i_mno,          
  10.                char[]           i_zdata,        
  11.                Bim_ZoneFormat   i_format,        
  12.                char[]           i_mpart,
  13.                char*            o_fmp5,        
  14.                int*             o_fmp5_len,    
  15.                Bim_DataError*   bim_data_error  
  16.            );
  17.  
  18.  


La declaracion de las variables
Código: Text
  1.          char texto = '&#092;0';
  2.  
  3.                     Bim_Mode bim_mode2;
  4.                     bim_mode2.acm_db_tpye = AcmDbType.ACM_DB_TYPE_RDB_L;
  5.                     bim_mode2.bim_limit = Bim_Limit.eBimLimitYes;
  6.                     bim_mode2.num_limit = 63;
  7.                     bim_mode2.key_list = &texto;
  8.                     bim_mode2.key_list_len = 0;
  9.                     bim_mode2.bim_clear = Bim_Clear.eBimClearBCD_AxisYes;
  10.                     bim_mode2.bim_check = Bim_Check.eBimCheckNo;
  11.  
  12.                     FisCore o_core;
  13.                     FisQuality o_qu;
  14.                     FisMinutiaNo o_mno;
  15.                     char[] o_zdata = new char[256];     /* fix size */
  16.                     char[] o_mpart = new char[16*256];  /* fix size */
  17.  
  18.                     Bim_ZoneFormat i_format = new Bim_ZoneFormat();
  19.                     i_format = Bim_ZoneFormat.eBimZoneFormat_32x32_2bit;
  20.                     char o_fmp52;
  21.                     int o_fmp5_len2;
  22.                     Bim_DataError bim_data_error2 = new Bim_DataError();
  23.  
  24.  


La llamada a la funcion:
Código: Text
  1.  
  2.                     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);
  3.  
  4.  

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.
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]