VC-Implementierungsmethode zum Schreiben einer von JAVA aufgerufenen DLL

PHPz
Freigeben: 2024-01-22 16:57:16
nach vorne
942 Leute haben es durchsucht

VC-Implementierungsmethode zum Schreiben einer von JAVA aufgerufenen DLL

Wie man mit VC eine DLL schreibt, die JAVA aufrufen kann

}(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)! :)

So schreiben Sie eine DLL-Datei für eine von VC geschriebene EXE-Datei und lassen diese EXE die DLL aufrufen

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üssen

xxx.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!

Quelle:docexcel.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage