異なる理由により、JNIを使用してJavaでC#メソッドを直接呼び出すことはできません。最初に、C++のラッパーをC++で記述し、dllを作成してJNIを使ってJavaで使用する必要があります。Javaプログラム内でC#メソッドを呼び出す
C++でC#コードを呼び出す際に問題があります。 C#.netmodule
ファイルをC++プロジェクトに追加します。下にコードが貼り付けられます。私が何か悪いことをしているなら、私を案内してください。
これは私の管理C++クラスUsbSerialNum.h
です:私は.netmodule
ファイルを作成しましたから
#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();
}
};
C#UsbSerialNumberCSharp.cs
ファイル:ここで
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");
}
}
}
はmakeDLL.dll
が作成され、そこから私のメインmakeDLL.cpp
ファイルです:
#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();
}
は、ここに私の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:
私は単純に、すなわち私のメインのファイルにUsbSerial.hへの呼び出しを無視した場合はその後、私のコードは、Javaで正常に動作している++簡単なCを使用しています。基本的にC++管理クラスは正しく動作しません。 私を案内してください。ありがとう。
ここでエラーが発生しますか? – Illuminati
何が問題なのですか?これはC++で管理されていますか?私は '__gc'ビットを認識しません – flipchart
私は質問を編集しました。チェックアウトしてください。ありがとう。 – HashimR