Función en DllImport

02/07/2007 - 10:51 por Plextor | Informe spam
Hola estoy llamando a una librería realizara en C y la mayoría de las
llamadas a funciones de dicha librería me funcionan correctamente en C#,
pero tengo una en cuestión que me dá problemas.

Os pongo la cabecera del .H para a ver si vosotros me echais un cable:


.H

int DllExport DkReadKey(HANDLE handle, char* buffer, int size, long
offset, int cycles);

Descripción:
buffer: A pointer to the character buffer that receives the data read
from the key.

C#

[DllImport("dkeserialdll.dll")]
public static extern int DkReadKey(int handle, out char[] buffer, int
size, long offset, int cycles);

private int Read_Key()
{
char[] buffer = new char[65];
result = DkReadKey(handle, out buffer, 64, 0, 1);
}

Un saludo,
Plextor

Preguntas similare

Leer las respuestas

#6 Plextor
02/07/2007 - 12:01 | Informe spam
OK, gracias.

Un saludo,
Plextor

RFOG escribió:
En un rato te respondo...

En Mon, 02 Jul 2007 11:40:11 +0200, Plextor escribió:

He problado lo que me comentas:

[DllImport("dkeserialdll.dll")]
public static extern int DkReadKey(int handle, out byte[] buffer, int
size, long offset, int cycles);

private int Read_Key()
{
byte[] buffer = new byte[65];
result = DkReadKey(handle, out buffer, 64, 0, 1);
}

y me sigue dando el error:
Una llamada a la función PInvoke 'Llave!Llave.Form1::DkReadKey'
impidió la correspondencia de la pila. Es posible que la razón sea que
la firma PInvoke administrada no coincida con la firma de destino no
administrada. Compruebe que la convención y los parámetros de llamada
de la firma PInvoke coinciden con la firma no administrada de destino.

Un saludo
Plextor

Plextor escribió:
Hola estoy llamando a una librería realizara en C y la mayoría de las
llamadas a funciones de dicha librería me funcionan correctamente en C#,
pero tengo una en cuestión que me dá problemas.
Os pongo la cabecera del .H para a ver si vosotros me echais un cable:
.H
int DllExport DkReadKey(HANDLE handle, char* buffer, int size, long
offset, int cycles);
Descripción:
buffer: A pointer to the character buffer that receives the data read
from the key.
C#
[DllImport("dkeserialdll.dll")]
public static extern int DkReadKey(int handle, out char[] buffer, int
size, long offset, int cycles);
private int Read_Key()
{
char[] buffer = new char[65];
result = DkReadKey(handle, out buffer, 64, 0, 1);
}
Un saludo,
Plextor







Respuesta Responder a este mensaje
#7 RFOG
02/07/2007 - 12:32 | Informe spam
Tienes dos errores.

El primero es lógico:

un Handle no es un int, sino un IntPtr que debe apuntar a un handle de
ventana, o de archivo o de lo que sea. Lo debes saber con lo que quiera
que haga la DLL.

El equivalente a un "char *" en C# es, extrañamente, un StringBuilder... .
El Interop por atributos hace lo demás.

La firma sería:

public static extern int DkReadKey(IntPtr handle, StringBuilder sb, int
size, long offset, int cycles);



En Mon, 02 Jul 2007 10:51:58 +0200, Plextor escribió:

Hola estoy llamando a una librería realizara en C y la mayoría de las
llamadas a funciones de dicha librería me funcionan correctamente en C#,
pero tengo una en cuestión que me dá problemas.

Os pongo la cabecera del .H para a ver si vosotros me echais un cable:


.H

int DllExport DkReadKey(HANDLE handle, char* buffer, int size, long
offset, int cycles);

Descripción:
buffer: A pointer to the character buffer that receives the data read
from the key.

C#

[DllImport("dkeserialdll.dll")]
public static extern int DkReadKey(int handle, out char[] buffer, int
size, long offset, int cycles);

private int Read_Key()
{
char[] buffer = new char[65];
result = DkReadKey(handle, out buffer, 64, 0, 1);
}

Un saludo,
Plextor





Visita mi blog principal: http://rfog.blogsome.com
Y este sobre programación: http://geeks.ms/blogs/rfog
Libros, ciencia ficción y programación
Debemos buscar para nuestros males otra causa que no sea Dios.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida