}(2) Kompilieren Sie die Java-Datei und kompilieren und generieren Sie dann die Header-Datei (für die Verwendung in VC). javac GB2PY.java // Klasse kompilieren und generieren (3) Erstellen Sie den Ordner com/bw/gb2py im aktuellen Ordner und Fügen Sie GB2PY.class hinzu. Legen Sie es in den Ordner, kehren Sie zum aktuellen Ordner zurück und rufen Sie den Javah-Befehl auf, um die Header-Datei zu generieren. javah com.bw.gb2py.GB2PY // Generieren Sie eine Header-Datei. Der Dateiname lautet com_bw_gb2py_GB2PY.h. Beachten Sie, dass der Inhalt der Header-Datei nicht geändert werden kann, da die generierte DLL sonst nicht verwendet werden kann (4) Erstellen Sie eine neue Win32-DLL Projekt mit dem Namen GB2PY in VC, Kopieren Sie com_bw_gb2py_GB2PY.h in das Projektverzeichnis und fügen Sie es dem Projekt hinzu. Kopieren Sie dann %JAVA_HOME%/include/jni.h und %JAVA_HOME%/include/win32/jni_md.h in das Projektverzeichnis und fügen Sie es dem Projekt hinzu. (5) Implementieren Sie die in com_bw_gb2py_GB2PY.h deklarierte Methode: Java_com_bw_gb2py_GB2PY_GetPY. Achten Sie auf die Konvertierung von Java-String und -Zeichen in c. Die Zeichenfolgen von Java sind in Unicode (Doppelbyte) codiert, während char ein Einzelbyte-Zeichensatz ist. int (*GetPY)(char* szGBString,PY &oPY);JNIEXPORT jstring JNICALL Java_com_bw_gb2py_GB2PY_GetPY
(JNIEnv * env, jclass, jstring name){static HMODULE hModle = LoadLibrary("PYconvert.dll"); //Drittanbieter-DLL
GetPY = (LPFUN)GetProcAddress(hModle,"GBToPY");int len;char charName[128];
char charPY[512];
len = env->GetStringLength(name) * 2 + 1; //Doppelbyte-Länge in Einzelbyte-Länge konvertieren, 1 hinzufügen, um das Abschlusszeichen hinzuzufügen
memset(charName, 0, len);
const wchar_t * w_buffer = env->GetStringChars(name, 0);
int wlen = wcslen(w_buffer);
len = WideCharToMultiByte(CP_ACP, 0, w_buffer, wcslen(w_buffer) + 1, charName, len, NULL, NULL);
env->ReleaseStringChars(name, w_buffer); //Der obige Code kopiert den Inhalt des Java-Strings name in das char-Array charName... //Lassen Sie einige Funktionscodes weg und konvertieren Sie chinesische Zeichen in Pinyin, indem Sie eine Drittanbieter-DLL aufrufen Funktion, gespeichert im charPY-Array int slen = strlen(charPY);
jchar * buffer = new jchar[slen];
len = MultiByteToWideChar(CP_ACP, 0, charPY, strlen(charPY), buffer, slen);
if (len > 0 & len
buffer[len] = 0; //Der obige Code konvertiert einen String vom Typ char in einen String vom Typ jchar jstring js = env->NewString(buffer, len);
delete [] buffer; return js;} (6) Kompilieren und generieren Sie eine DLL-Datei, die in Java aufgerufen werden kann (Sie müssen die im zweiten Schritt generierte Klasse verwenden)! :)
Du meinst, wie man eine DLL schreibt? , oder wie rufe ich die von Ihnen geschriebene DLL auf?
Wie schreibe ich dll:vc++6.0? Beim Erstellen eines neuen Projekts wählen Sie normalerweise eine der folgenden Optionen:
MFC AppWizard[dll] kann die Dynamic Link Library des MFC-Frameworks nutzen
Win32 Dynamic Link Library-Fenster32-Bit-Standard-Dynamikbibliothek
Wählen Sie dann das benötigte Framework aus und schließen Sie es ab. Die Basis-DLL ist fertig.
Wenn Sie vs2003 und höher haben (vs2010 wurde noch nicht verwendet, daher werde ich es nicht erwähnen), erstellen Sie ein neues
Es gibt zwei Arten, die im Ingenieurwesen häufig verwendet werden:
MFC->MFC Dll
Win32->Beliebig->Wählen Sie die DLL-Option im Popup-Dialogfeld aus
Weitere Optionen hängen von Ihren Bedürfnissen ab. Dann ist es fertig und die Basis-DLL ist fertig.
Rufen Sie die DLL auf, die Sie geschrieben haben: Verwenden Sie LoadLibrary("xxx.dll");
dort, wo Sie sie aufrufen müssenxxx.dll ist die DLL, die Sie geschrieben haben, wenn Sie sie dann in xxx.dll geschrieben haben
Für die Schnittstelle können Sie die folgende Methode verwenden, um die Methode in der DLL aufzurufen:
1. Fügen Sie die Schnittstellen-Header-Datei der DLL in Ihr exe-Projekt ein. Die Schnittstellenfunktion lautet beispielsweise void FunName(int a);
2. typedef void(*Func)(int); //Schnittstelle definieren
3. Bei Bedarf verwenden:
........................
HMOUDLE hMyDll = LoadLibrary("xxx.dll");
if (hMyDll != NULL)
{
Func *pDllFun=(Func *)::GetProcAddress(hMyDll,"FunName");//FunName ist die Schnittstellenfunktion in Ihrer Dll
if (pDllFun != NULL)
{
pDllFun(1); //Funktion in Dll aufrufen
}
}
4. Deinstallieren Sie die DLL, wenn sie nicht mehr benötigt wird. FreeLibrary(hMyDll);
/////////////////////////////////////////////////////////////////////////////// /// /////
Wurde Ihre DLL in dem Verzeichnis generiert, in dem sich die Exe befindet?
Das obige ist der detaillierte Inhalt vonVC-Implementierungsmethode zum Schreiben einer von JAVA aufgerufenen DLL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!