פורסם 2007 במרץ 818 שנים אני מנסה לפתוח קובץ DLL <שJAVAV תפתח פונקציות הכתובות ב++C>זה מה שעשיתי: ++C קובץ הצהרהJNIEXPORT jint JNICALL Java_Targil1_begingMasseage (JNIEnv *, jobject, jchar*);++C קובץ cppJNIEXPORT 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)יש פתרון מה לעשות??
פורסם 2007 במרץ 818 שנים אולי מדובר בבעיית PATH. את מריצה את הקובץ class/jar מאותה תיקיה שנמצא הקובץ Targil1.dll ?
פורסם 2007 במרץ 818 שנים מחבר יש לי בעיה בפתיחת הקבצים איפה אני עושה כל דבר.אני פותחת את ++C ואז איפה אני פותחת את JAVA (אני עובדת בסביבת ECLIPSE)? לאותו קובץ שפתחתי את ++C? ???
פורסם 2007 במרץ 818 שנים לא הבנתי מה אמרת... האם הצלחת דבר ראשון לקמפל את קבצי ה C/C++ לקבצי DLL ?[br]פורסם בתאריך: 8.03.2007 בשעה 16:36:36אולי זה יסביר, מתחילים עם (הכל פה באותה תיקיה) JNIExample.javaclass 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.javajavah 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 JNIExampletesting: hi there
פורסם 2007 במרץ 818 שנים מחבר אה תודה!עוד בעיה:יש לי פונקציה שעובדת- ואם אני משנה לה את השם , וקוראת לה בשמה החדש, היא לא עובדת.למה??????????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 CPPJNIEXPORT 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);}
פורסם 2007 במרץ 818 שנים את צריכה לקמפל מחדש את כל הקוד, גם ה JAVA וגם ה C++. תפרטי בדיוק מה זה לא עובדת (איזה שגיאה מקבלים וכו'..)
פורסם 2007 במרץ 818 שנים מחבר הקובץ ++C מתקמפל וJAVA לא.המוזר הוא שהתכנית עבדה, ואז שיניתי רק את השם של הפונקציה <בקובץ JAVA, H , CPP> וזה הפסיק לעבוד ורשם לי ההערה הנ"ל
פורסם 2007 במרץ 818 שנים אפשר להתחיל לתת שמות נכונים באנגלית, זה אף פעם לא מזיק. בכל מקרה, מה השגיאה שה JAVA נותן בקימפול (ואיפה הקוד העדכני)...
פורסם 2007 במרץ 818 שנים מחבר כשאני אדע אנגלית אני אתן בשמחה שמות נכונים- כרגע זו נקודה כאובה :'(השגיאה שנותן:Exception in thread "main" java.lang.UnsatisfiedLinkError: begingMasseageat Targil1.begingMasseage(Native Method)
פורסם 2007 במרץ 818 שנים זה כשאת מריצה, לא מקמפלת.. תראי את כל הקבצים (ותבדקי את שמות הקבצים ושאת עושה הכל מאותה תיקיה).
פורסם 2007 במרץ 818 שנים מחבר קובץ הJAVA מתקמפל ונתקע בהרצה.זה הגיוני שפעם אחת זה עובד, ופעם אחרת רק בשינוי שם הפונקציה זה נתקע??
פורסם 2007 במרץ 818 שנים עם JNI הכל אפשרי, השאלה מה את עושה, יותר הגיוני שהטעות היא שם בתהליך...(תמחקי את כל קבצי ה CLASS ו DLL, ותיצרי אותם מחדש, אחרי שבדקת שההגדרת של השמות בסדר, גם ב C וגם ב JAVA).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.