ホームページ > 記事 > コンピューターのチュートリアル > JAVAから呼び出されるDLLを記述するVC実装方法
}(2) Java ファイルをコンパイルし、コンパイルしてヘッダー ファイルを生成します (vc 用) javac GB2PY.java //コンパイルしてクラスを生成します(3) 現在のフォルダーに com/bw/gb2py フォルダーを作成します、 GB2PY .class をフォルダーに追加し、現在のフォルダーに戻り、javah コマンドを呼び出してヘッダー ファイルを生成します。 javah com.bw.gb2py.GB2PY //ヘッダー ファイルを生成します。ファイル名は com_bw_gb2py_GB2PY.h です。ヘッダー ファイルの内容は変更できません。変更しないと、生成された DLL は使用できません。 (4) Win32 DLL を新規作成します。 VC に GB2PY という名前のプロジェクトを作成し、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 を実装します。 c での Java 文字列と文字の変換に注意してください。 Java の文字列は Unicode (2 バイト) でエンコードされますが、char は 1 バイトです。 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 文字列 name の内容を char 配列 charName にコピーします... //一部の関数コードを省略し、サードパーティ DLL を呼び出して中国語の文字を変換します関数はピンインで、charPY 配列に格納されます。 int slen = strlen(charPY);
jchar * バッファ = 新しい jchar[slen];
len = MultiByteTowideChar(CP_ACP, 0, charPY, strlen(charPY), バッファ, slen);
if (レン > 0 & レン
buffer[len] = 0; //上記のコードはchar型文字列をjchar型文字列に変換します jstring js = env->NewString(buffer, len);
delete []buffer;return js;}(6) Java で呼び出すことができる dll ファイルをコンパイルして生成します (2 番目のステップで生成されたクラスを使用する必要があります)。 :)
dll の書き方のことですか? 、または作成した DLL を呼び出すにはどうすればよいですか?
dll:vc 6.0 の書き方。新しいプロジェクトを作成するときは、通常、次のいずれかを選択します。
MFC AppWizard[dll]は、MFC フレームワークのダイナミック リンク ライブラリを使用できます
Win32 ダイナミックリンク ライブラリ window32 ビット標準ダイナミック ライブラリ
あとは必要なフレームワークを選択して完了です 基本的なdllはこんな感じです。
vs2003 以降 (vs2010 は使用していないので説明しません) を使用している場合は、新しい
を作成します。次の 2 つのタイプはプロジェクトでよく使用されます:
MFC->MFC DL
Win32->いずれか->ポップアップ ダイアログ ボックスで Dll オプションを選択します
その他のオプションはニーズに応じて異なります。それが完了し、基本的な DLL の準備が整います。
作成した DLL を呼び出します: LoadLibrary("xxx.dll");
を呼び出す必要がある場所で使用します。xxx.dll はあなたが書いた DLL であり、xxx.dll に
を書いた場合インターフェイスの場合、次のメソッドを使用して dll 内のメソッドを呼び出すことができます:
1. DLL のインターフェイス ヘッダー ファイルを exe プロジェクトに含めます。たとえば、インターフェイス関数は 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 が不要になったらアンインストールします。 FreeLibrary(hMyDll);
///////////////////////////////////////////// //// ///////
DLL は、exe が存在するディレクトリに生成されましたか?
以上がJAVAから呼び出されるDLLを記述するVC実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。