Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Error al utilizar una función de c++ en c#

Estas en el tema de Error al utilizar una función de c++ en c# en el foro de C/C++ en Foros del Web. Hola a todos. Espero que esten bien. Tengo un problemita, es el siguiente y espero que me puedan ayudar: Estoy realizando una aplicacion en c# ...
  #1 (permalink)  
Antiguo 03/02/2011, 15:22
 
Fecha de Ingreso: febrero-2011
Ubicación: c
Mensajes: 4
Antigüedad: 13 años, 9 meses
Puntos: 0
Error al utilizar una función de c++ en c#

Hola a todos. Espero que esten bien.
Tengo un problemita, es el siguiente y espero que me puedan ayudar:

Estoy realizando una aplicacion en c# que utiliza una libreria de c++.

Esta libreria se llama jetft.dll que tiene un metodo que me permite imprimir una cadena de texto:

Código C++:
Ver original
  1. extern "C" JQEXT_API int JQ_PrinterPrint(const wchar_t* txt)
  2. {
  3.     return theJQPrinter().print(txt);
  4. }

y desde c# la invoco de la siguiente manera:

Código C#:
Ver original
  1. [DllImport("jetft.dll")]
  2.         public static extern string JQ_PrinterPrint(ref string txt);

y llamo este metodo asi:

Código c#:
Ver original
  1. string alg = "Texto a imprimir....";
  2.  
  3.   private void button1_Click(object sender, EventArgs e)
  4.         {
  5.          
  6.             JQ_PrinterPrint(ref alg);      
  7.  
  8.         }

y el problema es que no me imprime esa cadena de texto.

Creo que un motivo por el cual no me funciona es porque la libleria c++ recive en su metodo un "const wchar_t* txt" y no se como enviarlo correctamente esa cadena desde c#.

Agradezco que me puedan ayudar.


Última edición por davinci_das; 04/02/2011 a las 07:36
  #2 (permalink)  
Antiguo 04/02/2011, 17:19
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: Error al utilizar una función de c++ en c#

bien lo primero que tienes que hacer es compilar tu proyecto con la opcion /clr

para esto acceso a propiedades del proyecto -> C/C++ -> Command line y escribe /clr

ademas debes en Code Generation la opcion Basic Rutimetime ponerlo a Default
la opcion Enable Minimal Rebuild = No

y en General en la opcion Debug Information Format = Disable

si te compilo sin error la dll,

crea la siguiente clase
namespace clases
public ref class CClaseA
{

public:
CClaseA(){}
int fo()
{
return 1;
}
};

crea otro proyecto pero esta vez de c#, para correr en consola, el archivo dll creado con c, debe estar en el mismo directorio que el programa en c#

static void Main(string[] args)
{
clases.CClaseA objA = new CClaseA();
string cadena = "valor: " + objA.fo();
Console.Write(cadena);
}

Etiquetas: utilidades
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:37.