編寫供JAVA呼叫的DLL的VC實作方法
如何用VC寫一個供JAVA呼叫的DLL
}(2)編譯該java文件,再編譯生成頭文件(供vc使用)javac GB2PY.java //編譯生成class(3)在目前資料夾下建立com/bw/gb2py 資料夾,將GB2PY .class放入此資料夾,回到目前資料夾,呼叫javah指令產生頭檔。 javah com.bw.gb2py.GB2PY //產生頭文件,檔案名稱為com_bw_gb2py_GB2PY.h注意頭檔中的內容不能更改,否則產生的dll不能使用(4)在VC中新建名為GB2PY的Win32 dll工程,將com_bw_gb2py_GB2PY.h拷貝到工程目錄下,並加入工程。再拷貝%JAVA_HOME%/include/jni.h 和 %JAVA_HOME%/include/win32/jni_md.h 到工程目錄下,並加入工程。 (5)實作com_bw_gb2py_GB2PY.h中宣告的方法:Java_com_bw_gb2py_GB2PY_GetPY。注意java string和c中char的轉換。 java的string都用unicode編碼(雙位元組),而char是單字節的。 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"); //第三方dll
GetPY = (LPFUN)GetProcAddress(hModle,"GBToPY");int len;char charName[128];
char charPY[512];
len = env->GetStringLength(name) * 2 1; //雙位元組長度轉為單字節長度,加1是為了加結束符號
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);//以上程式碼將java string name中的內容拷貝到了char數組charName中... //省略部分功能代碼,透過呼叫第三方的dll函數將漢字轉換為拼音,儲存在charPY陣列中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;//以上程式碼將char型字串轉換為jchar型字串 jstring js = env->NewString(buffer, len);
delete [] buffer;return js;}(6)編譯產生dll文件,在java中就可以呼叫了(要用到第二步產生的類別)! :)
怎麼為VC寫的EXE檔寫一個DLL檔讓這個EXE呼叫DLL
你是說要怎麼寫dll? ,還是怎麼呼叫你寫的dll?
怎麼寫dll:vc 6.0的話,在建立新工程時常用的選擇以下任一個:
MFC AppWizard[dll] 可以使用MFC框架的動態連線庫
Win32 Dynamic-link Library window32位元標準動態函式庫
然後選擇你需要的框架,然後完成,基本的dll就這樣好了。
vs2003以上版本(vs2010沒用過,不提)的話,創建新
工程常用的有以下兩種:
MFC->MFC Dll
Win32->任一->在彈出的對話框中選擇Dll選項
其它選項看自己的需。然後完成,基本的dll就這樣好了。
呼叫你寫的dll:在需要呼叫的地方使用LoadLibrary("xxx.dll");
xxx.dll是你寫的dll,然後如果你在xxx.dll中寫了
介面的話,可以用以下方法呼叫dll中的方法:
1、在你的exe工程中包含dll的介面頭文件,例如介面函數為void FunName(int a);
2、typedef void(*Func)(int);//定義介面
3、在需要呼叫的地方使用:
.......................
HMOUDLE hMyDll = LoadLibrary("xxx.dll");
if (hMyDll != NULL)
{
Func *pDllFun=(Func *)::GetProcAddress(hMyDll,"FunName");//FunName就是你Dll中的介面函式
if (pDllFun != NULL)
{
pDllFun(1);//呼叫Dll中函數
}
}
4、在不需要Dll的時候,卸載Dll。 FreeLibrary(hMyDll);
/////////////////////////////////////////////// ///////
你的Dll有沒有產生到exe所在的目錄下?
以上是編寫供JAVA呼叫的DLL的VC實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

蒸汽雲錯誤可能是由於許多原因引起的。要順利玩遊戲,您需要採取一些措施來刪除此錯誤,然後才能啟動遊戲。 PHP.CN軟件在這篇文章中介紹了一些最佳方法以及更多有用的信息。

您可能會看到“無法建立與Windows Metadata和Internet Services(WMI)的連接”。事件查看器的錯誤。 PHP.CN的這篇文章介紹瞭如何刪除Windows元數據和Internet服務問題。

KB5035942更新問題 - 用戶通常發生崩潰系統。受到的人們希望找到擺脫困境的出路,例如崩潰系統,安裝或聲音問題。針對這些情況,這篇文章由Php.cn Wil發表

如果您在計算機上有一個名為PC App Store的程序,並且沒有故意安裝它,則可能會感染惡意軟件。 PHP.CN的這篇文章介紹瞭如何刪除PC App Store惡意軟件。

OneDrive是Microsoft的在線雲存儲服務。有時,您可能會發現OneDrive無法將照片上傳到雲。如果您在同一條船上,請繼續閱讀PHP.CN軟件的帖子,以獲取有效的解決方案!

兄弟是:兩個兒子重製的故事沒有發起嗎?遇到兄弟:兩個兒子重製黑屏的故事?在這裡,有關PHP.CN的這篇文章為您提供了測試的解決方案,以幫助您解決此問題。

Chris Titus Tech具有稱為Windows實用程序的工具,可以幫助您輕鬆地創建Debloated Windows 11/10 ISO安裝乾淨的系統。 PHP.CN提供了有關如何使用Chris Titus工具完成此操作的完整指南。

您是否質疑Msconfig不斷恢復到窗口上的選擇性啟動的問題?如果需要,如何切換到普通啟動?嘗試在此php.cn帖子中解釋的方法,以找到適合您的方法。
