StackOverflow

19/12/2006 - 10:37 por moga | Informe spam
Hola,
Tengo una libreria hecha en C que uso de forma externa desde C#,
(DllImort).
El caso es que, al llamar a cualquier método aparece el error "Stack
Overflow". Y no encuentro la forma de solucionarlo.
Tengo el codigo de C, por lo que podria recompilar la libreria. He
probado varias alternativas de compilación y no hay manera. Tampoco se

si el problema es de la libreria o del programa C#.

He estado mirando por foros temas sobre la pila. Parece que podria
solventarse aumentando el espacio de pila del programa en C#; pero no
parece que exista una opción para aumentar la pila en C#.


¿A alguien le ha ocurrido algo por el estilo? ¿Podriais ayudarme?


Saludos,
Jose Luis

Preguntas similare

Leer las respuestas

#1 Juan.Gomez
20/12/2006 - 07:35 | Informe spam
[DllImport("mvaicvox.dll")]
public static extern int newcall(int pchannel, IntPtr vduid);



Luego declarar algunas variables del tipo:
IntPtr szvdui;
Para paramtros de entrada/salida usas IntPtr (este es el caso de un
parametro de entrada/salida entero).
Para paramtros de entrdra usas los tradicionales: int, string, etc...

Esto para variables donde szvdui es un apuntador que en C usamos como int
*variable.

Luego para usar tu funcion externa:

szvdui = Marshal.AllocHGlobal(60);
ret = newcall(pchannel, szvdui);

Notas que tanto ret, pchannel son enteras (ints), porque asi son declaras
tanto en la funcion newcall que es una funcion externa tambien creada en C
(como libreria).

Prueba y me cuentas:
, Skype: PrismSC, Googletalk:
www.prismsc.com

Nota:
He creado muchas librerias con esta tecnologia y librerias externas, por lo
cual no dudes en consultarme para apoyarte.

"moga" wrote in message
news:
Hola,
Tengo una libreria hecha en C que uso de forma externa desde C#,
(DllImort).
El caso es que, al llamar a cualquier método aparece el error "Stack
Overflow". Y no encuentro la forma de solucionarlo.
Tengo el codigo de C, por lo que podria recompilar la libreria. He
probado varias alternativas de compilación y no hay manera. Tampoco se

si el problema es de la libreria o del programa C#.

He estado mirando por foros temas sobre la pila. Parece que podria
solventarse aumentando el espacio de pila del programa en C#; pero no
parece que exista una opción para aumentar la pila en C#.


¿A alguien le ha ocurrido algo por el estilo? ¿Podriais ayudarme?


Saludos,
Jose Luis
Respuesta Responder a este mensaje
#2 Juan.Gomez
20/12/2006 - 07:38 | Informe spam
Asi debes usar librerias externas con DLLImport en C#:
Recuerda integrar en tu programa:
using System.Runtime.InteropServices;

Y luego:

[DllImport("mvaicvox.dll")]
public static extern int newcall(int pchannel, IntPtr vduid);



Luego declarar algunas variables del tipo:
IntPtr szvdui;

Esto para variables donde szvdui es un apuntador que en C usamos como int
*variable.
Cuando son parametros solamente de entrada usas los comunes: int, string,
etc...
Cuando son parametros de entrada/salida usas IntPtr (para el caso de enteros
apuntadores).

Luego para usar tu funcion externa:

szvdui = Marshal.AllocHGlobal(60);
ret = newcall(pchannel, szvdui);

Notas que tanto ret, pchannel son enteras (ints), porque asi son declaras
tanto en la funcion newcall que es una funcion externa tambien creada en C
(como libreria).

Prueba y me cuentas:
, Skype: PrismSC, Googletalk:
www.prismsc.com

Nota:
He creado muchas librerias con esta tecnologia y librerias externas, por lo
cual no dudes en consultarme para apoyarte.

"moga" wrote in message
news:
Hola,
Tengo una libreria hecha en C que uso de forma externa desde C#,
(DllImort).
El caso es que, al llamar a cualquier método aparece el error "Stack
Overflow". Y no encuentro la forma de solucionarlo.
Tengo el codigo de C, por lo que podria recompilar la libreria. He
probado varias alternativas de compilación y no hay manera. Tampoco se

si el problema es de la libreria o del programa C#.

He estado mirando por foros temas sobre la pila. Parece que podria
solventarse aumentando el espacio de pila del programa en C#; pero no
parece que exista una opción para aumentar la pila en C#.


¿A alguien le ha ocurrido algo por el estilo? ¿Podriais ayudarme?


Saludos,
Jose Luis
Respuesta Responder a este mensaje
#3 moga
20/12/2006 - 10:39 | Informe spam
Hola, gracias por responder.

Tengo un método de la librería con la siguiente firma en C:
DllExport int encuentra_y_evalua_expansiones_dp (char *pal_2, char
*pal_1, char *cadT9, int flag_usa_lm, int flag_cascada, struct
est_info_prob_pal *sec_info_prob_pal);

el último parámetro es un array de struct de entrada/salida.

En C# intento:
[DllImport(baseDir + "diccio_pred.dll")]
public extern static int encuentra_y_evalua_expansiones_dp(string
pal2, string pal1, string cadT9, int flag_usaLM, int flag_cascada, ref
est_info_prob_pal[] info_prob_pal);

Y luego lo invoco:
est_info_prob_pal[] palabras = null;
palabras = new est_info_prob_pal[100];
ret = encuentra_y_evalua_expansiones_dp(".", ".", "4652", 1, 1,
ref palabras);

Pero me da error de, a causa de 'ref' no es compatible con interop.

Entonces he intentado hacer lo que me comentas de IntPtr y
Marshal.AllocHGlobal. Pero el parámetro es un struct y no un int. Y no
se como relacionarlos.

Saludos,
Jose Luis
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida