DLL מי מכיר? - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

DLL מי מכיר?


~שירה

Recommended Posts

אני מנסה לפתוח קובץ DLL <שJAVAV תפתח פונקציות הכתובות ב++C>

זה מה שעשיתי:

++C קובץ הצהרה


JNIEXPORT jint JNICALL Java_Targil1_begingMasseage
(JNIEnv *, jobject, jchar*);

++C קובץ cpp


JNIEXPORT jchar* JNICALL Java_Targil1_begingMasseage
(JNIEnv *env, jobject obj)
{
char* message = new char[80];
message = "Hello World";
return message;
}

JAVAקובץ


ublic class Targil1
{
public native String begingMasseage();

public static void main(String[] args)
{
System.loadLibrary("Targil1");
Targil1 tar = new Targil1();
String message = tar.begingMasseage();

System.out.println("begingMasseage: " + message);

}
}

וזה מה שהקומפיילר רושם לי:


Exception in thread "main" java.lang.UnsatisfiedLinkError: begingMasseage
at Targil1.begingMasseage(Native Method)

יש פתרון מה לעשות??

קישור לתוכן
שתף באתרים אחרים

  • תגובות 41
  • נוצר
  • תגובה אחרונה

יש לי בעיה בפתיחת הקבצים איפה אני עושה כל דבר.

אני פותחת את ++C ואז איפה אני פותחת את JAVA (אני עובדת בסביבת ECLIPSE)? לאותו קובץ שפתחתי את ++C? ???

קישור לתוכן
שתף באתרים אחרים

לא הבנתי מה אמרת... האם הצלחת דבר ראשון לקמפל את קבצי ה C/C++ לקבצי DLL ?[br]פורסם בתאריך: 8.03.2007 בשעה 16:36:36


אולי זה יסביר, מתחילים עם (הכל פה באותה תיקיה) JNIExample.java

class JNIExample {
public native String testing();

static {
System.loadLibrary("JNIExample");
}

public static void main(String[] args) {
System.out.println("testing: " + new JNIExample().testing());
}
}

מקפלים את זה עם javac, אחרי זה יוצרים קובץ stub עם javah:

javac JNIExample.java

javah JNIExample

אחרי זה יוצרים קובץ JNIExample.c:

#include <jni.h>

JNIEXPORT jstring JNICALL Java_JNIExample_testing (JNIEnv *env, jobject obj)
{
char *test;
return (*env)->NewStringUTF(env, "hi there");
}

שאותו מקמפלים (במקרה הזה עשיתי את זה עם הקומפיילר של ויזואל סטודיו):

cl JNIExample.c -FeJNIExample.dll -LD -I"c:\Program Files\Java\jdk1.5.0_06\include" -I"c:\Program Files\Java\jdk1.5.0_06\include\win32"

להחליף רק את התיקיות של איפה שנמצא ה JDK במחשב.

לבסוף מריצים את הקוד JAVA:

java JNIExample

testing: hi there

קישור לתוכן
שתף באתרים אחרים

אה תודה!

עוד בעיה:

יש לי פונקציה שעובדת- ואם אני משנה לה את השם , וקוראת לה בשמה החדש, היא לא עובדת.

למה??????????

JAVA


public native String begingMasseage(String message);

public static void main(String[] args)
{
System.loadLibrary("Targil1");
Targil1 tar = new Targil1();
String message = tar.begingMasseage("begin Masssage");

System.out.println("begingMasseage: " + message);
}


++C CPP


JNIEXPORT jstring JNICALL Java_Targil1_begingMasseage
(JNIEnv *env, jobject obj, jstring message)
{
const char *str = env->GetStringUTFChars(message, 0);
char m[80];
strcpy(cap, str);
env->ReleaseStringUTFChars(message, str);
return env->NewStringUTF(m);
}

קישור לתוכן
שתף באתרים אחרים

כשאני אדע אנגלית אני אתן בשמחה שמות נכונים- כרגע זו נקודה כאובה :'(

השגיאה שנותן:


Exception in thread "main" java.lang.UnsatisfiedLinkError: begingMasseage
at Targil1.begingMasseage(Native Method)

קישור לתוכן
שתף באתרים אחרים

עם JNI הכל אפשרי, השאלה מה את עושה, יותר הגיוני שהטעות היא שם בתהליך...(תמחקי את כל קבצי ה CLASS ו DLL, ותיצרי אותם מחדש, אחרי שבדקת שההגדרת של השמות בסדר, גם ב C וגם ב JAVA).

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.


×
  • צור חדש...