Rumah > Artikel > tutorial komputer > Kaedah pelaksanaan VC untuk menulis DLL dipanggil oleh JAVA
}(2) Susun fail java, dan kemudian susun untuk menjana fail pengepala (untuk kegunaan vc) javac GB2PY.java //Kompil untuk menjana kelas(3) Cipta folder com/bw/gb2py dalam folder semasa, dan tambah GB2PY.class Masukkan ke dalam folder, kembali ke folder semasa, dan panggil arahan javah untuk menjana fail pengepala. javah com.bw.gb2py.GB2PY //Janakan fail pengepala, nama fail ialah com_bw_gb2py_GB2PY.h Ambil perhatian bahawa kandungan dalam fail pengepala tidak boleh ditukar, jika tidak, dll yang dihasilkan tidak boleh digunakan (4) Cipta Win32 dll. projek bernama GB2PY dalam VC, Salin com_bw_gb2py_GB2PY.h ke direktori projek dan tambahkannya pada projek. Kemudian salin %JAVA_HOME%/include/jni.h dan %JAVA_HOME%/include/win32/jni_md.h ke direktori projek dan tambahkannya pada projek. (5) Laksanakan kaedah yang diisytiharkan dalam com_bw_gb2py_GB2PY.h: Java_com_bw_gb2py_GB2PY_GetPY. Beri perhatian kepada penukaran rentetan java dan char dalam c. Rentetan Java dikodkan dalam unicode (double-bait), manakala char ialah single-bait. int (*GetPY)(char* szGBString,PY &oPY);JNIEXPORT jstring JNICALL Java_com_bw_gb2py_GB2PY_GetPY
(JNIEnv * env, jclass, nama jstring){static HMODULE hModle = LoadLibrary("PYconvert.dll"); //Dll pihak ketiga
GetPY = (LPFUN)GetProcAddress(hModle,"GBToPY");int len;char charName[128];
char charPY[512];
len = env->GetStringLength(name) * 2 + 1; //Tukar panjang dua bait kepada panjang bait tunggal, tambah 1 untuk menambah penamat
memset(charName, 0, len);
const wchar_t * w_buffer = env->GetStringChars(nama, 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); //Kod di atas menyalin kandungan nama rentetan java ke char array charName... //Tinggalkan beberapa kod fungsi dan tukar aksara Cina kepada pinyin dengan memanggil dll pihak ketiga function , disimpan dalam tatasusunan charPY int slen = strlen(charPY);
jchar * penimbal = jchar[slen] baharu;
len = MultiByteToWideChar(CP_ACP, 0, charPY, strlen(charPY), buffer, slen);
jika (len > 0 & len
buffer[len] = 0; //Kod di atas menukar rentetan jenis char kepada rentetan jenis jchar jstring js = env->NewString(buffer, len);
delete [] buffer; return js;} (6) Susun dan jana fail dll, yang boleh dipanggil dalam java (anda perlu menggunakan kelas yang dihasilkan dalam langkah kedua)! :)
Maksud anda bagaimana untuk menulis dll? , atau bagaimana untuk memanggil dll yang anda tulis?
Bagaimana untuk menulis dll:vc++6.0? Semasa membuat projek baharu, anda biasanya memilih mana-mana yang berikut:
MFC AppWizard[dll] boleh menggunakan perpustakaan pautan dinamik rangka kerja MFC
Win32 Dynamic-link Library window32-bit standard pustaka dinamik
Kemudian pilih rangka kerja yang anda perlukan, dan kemudian lengkapkan, dll asas sudah sedia.
Jika anda mempunyai vs2003 dan ke atas (vs2010 belum digunakan, jadi saya tidak akan menyebutnya), buat yang baharu
Terdapat dua jenis yang biasa digunakan dalam kejuruteraan:
MFC->MFC Dll
Win32->Mana-mana satu->Pilih pilihan Dll dalam kotak dialog pop timbul
Pilihan lain bergantung pada keperluan anda. Kemudian ia selesai, dan dll asas sudah sedia.
Panggil dll yang anda tulis: Gunakan LoadLibrary("xxx.dll");
di mana anda perlu memanggilnyaxxx.dll ialah dll yang anda tulis, maka jika anda menulisnya dalam xxx.dll
Untuk antara muka, anda boleh menggunakan kaedah berikut untuk memanggil kaedah dalam dll:
1. Sertakan fail pengepala antara muka dll dalam projek exe anda Sebagai contoh, fungsi antara muka adalah tidak sah FunName(int a);
2. typedef void(*Func)(int); //Tentukan antara muka
3 Gunakan di mana perlu:
........................
HMOUDLE hMyDll = LoadLibrary("xxx.dll");
jika (hMyDll != NULL)
{
Func *pDllFun=(Func *)::GetProcAddress(hMyDll,"FunName");//FunName ialah fungsi antara muka dalam Dll anda
jika (pDllFun != NULL)
{
pDllFun(1); //Fungsi panggilan dalam Dll
}
}
4. Nyahpasang Dll apabila ia tidak diperlukan lagi. FreeLibrary(hMyDll);
////////////////////////////////////////////////////////////////////// /// /////
Adakah Dll anda telah dijana dalam direktori di mana exe berada?
Atas ialah kandungan terperinci Kaedah pelaksanaan VC untuk menulis DLL dipanggil oleh JAVA. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!