Java'dan C# işlevini çağırmam gerekiyor ve buna aşağıdakileri oluşturdum. Ben bir java başlık dosyası Authenticator.h oluşturmak var burada kod şudur:Java'dan C# işlevi nasıl çağırılır
#include <jni.h>
/* Header for class Authenticator */
#ifndef _Included_Authenticator
#define _Included_Authenticator
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: Authenticator
* Method: authenticate
* Signature: (Ljava/lang/String;Ljava/lang/String;)Z
*/
JNIEXPORT jboolean JNICALL Java_Authenticator_authenticate
(JNIEnv *, jobject, jstring, jstring);
#ifdef __cplusplus
}
#endif
#endif
Ben o zaman kimlik doğrulaması Sonra
namespace SharpAuthenticator
{
public class Authenticator
{
public bool Authenticate(String username,String password)
{
return username == "user" && password == "login";
}
}
}
C# işlevi çağırmak için çalışıyorum bir C# fonksiyonunu oluşturmak Aşağıdaki kodu kullanarak C++ (proje oluşturmak için bir dll);
String^ toString(const char *str)
{
int len = (int)strlen(str);
array<unsigned char>^ a = gcnew array<unsigned char>(len);
int i = 0;
while (i < len)
{
a[i] = str[i];
i++;
}
return Encoding::UTF8->GetString(a);
}
bool authenticate(const char *username, const char *password)
{
SharpAuthenticator::Authenticator::Authenticate(toString(username), toString(password));
}
JNIEXPORT jboolean JNICALL Java_Authenticator_authenticate
(JNIEnv *env, jobject c, jstring name, jstring pass)
{
jboolean result;
jboolean isCopyUsername;
const char * username = env->GetStringUTFChars(name, &isCopyUsername);
jboolean isCopypassword;
const char * password = env->GetStringUTFChars(pass, &isCopypassword);
result = authenticate(username, password);
env->ReleaseStringUTFChars(name, username);
env->ReleaseStringUTFChars(pass, password);
return result;
}
Ve son olarak java'dan aramam gereken bir dll oluşturun. Dll oluşturuldu ve ben java'da iyi yüklüyorum ama bu hata kaydını java'da alıyorum. Ne eksik olabilirdim. .NET framework yolunu yüklemek içinde csc.exe
bulabilirsiniz
csc.exe /target:module Test.cs
:
using System;
public class Test{
public Test(){}
public String ping(){
return "C# is here.";
}
}
Ardından aşağıdaki komut ile bu derleme: Herşeyden
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (0xe0434352), pid=9708, tid=7756
#
# JRE version: 7.0-b147
# Java VM: Java HotSpot(TM) Client VM (21.0-b17 mixed mode, sharing windows-x86)
# Problematic frame:
# C [KERNELBASE.dll+0x812f]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
et Bu: http://stackoverflow.com/questions/8181344/calling-c-sharp-method-within-a-java-program – phantom
@phantom kullanıyorum çok bilgiye sahip değilsin C++. C++ C++ – MorganM
dan nasıl çağırabileceğimi bana yardımcı olabilir, ama şimdi 2 saat içinde deneyeceğim. – phantom