Los métodos C# no se pueden invocar directamente en Java utilizando JNI debido a diferentes motivos. Entonces primero tenemos que escribir un contenedor para C# usando C++, luego creamos el dll y lo usamos a través de JNI en Java.Llamando al método C# dentro de un programa Java
Tengo un problema al llamar al código C# en C++. Estoy agregando el archivo C# .netmodule
a un proyecto C++. El código está pegado a continuación. Por favor, guíame si estoy haciendo algo mal.
Este es mi C++ administrado clase UsbSerialNum.h
: es mi principal archivo de makeDLL.cpp
a partir del cual se crea
using System.Collections.Generic;
using System.Text;
namespace UsbSerialNumberCSharp
{
public class UsbSerialNumberCSharp
{
public UsbSerialNumberCSharp(){
Console.WriteLine("hello");
}
public static void hello()
{
Console.WriteLine("hello");
}
public void helloCSharp()
{
Console.WriteLine("helloCSharp");
}
}
}
Aquí makeDLL.dll
:
#using <mscorlib.dll>
#include <iostream>
#using "UsbSerialNumberCSharp.netmodule"
using namespace std;
using namespace System;
public __gc class UsbSerialNum
{
public:
UsbSerialNumberCSharp::UsbSerialNumberCSharp __gc *t;
UsbSerialNum() {
cout<<"Hello from C++";
t = new UsbSerialNumberCSharp::UsbSerialNumberCSharp();
}
void CallUsbSerialNumberCSharpHello() {
t->hello();
}
};
archivo C# UsbSerialNumberCSharp.cs
de la que he creado el archivo .netmodule
:
#include "jni.h"
#include <iostream>
// This is the java header created using the javah -jni command.
#include "testDLL.h"
// This is the Managed C++ header that contains the call to the C#
#include "UsbSerialNum.h"
using namespace std;
JNIEXPORT void JNICALL Java_testDLL_hello
(JNIEnv *, jobject) {
// Instantiate the MC++ class.
UsbSerialNum* serial = new UsbSerialNum();
serial->CallUsbSerialNumberCSharpHello();
}
Aquí es mi clase java:
public class testDLL {
static {
System.loadLibrary("makeDLL");
}
/**
* @param args
*/
public static void main (String[] args) {
// new testDLL().GetUSBDevices("SCR3", 100);
new testDLL().hello();
}
public native void hello();
}
EDIT:
si simplemente ignorar la llamada a UsbSerial.h en mi archivo principal de esto es simple uso de C++ entonces mi código está trabajando muy bien en Java. Básicamente, la clase administrada de C++ no funciona correctamente. Por favor, guíame. Gracias.
en cuyo caso, ¿recibe el error? – Illuminati
¿Cuál es el problema? ¿Es esto administrado C++? No reconozco los bits '__gc' – flipchart
que he editado la pregunta. Por favor, míralo. Gracias. – HashimR