ホームページ  >  記事  >  コンピューターのチュートリアル  >  JAVAから呼び出されるDLLを記述するVC実装方法

JAVAから呼び出されるDLLを記述するVC実装方法

PHPz
PHPz転載
2024-01-22 16:57:16933ブラウズ

JAVAから呼び出されるDLLを記述するVC実装方法

VC を使用して JAVA 呼び出し用の DLL を作成する方法

}(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, s​​trlen(charPY), バッファ, slen);

if (レン > 0 & レン

buffer[len] = 0; //上記のコードはchar型文字列をjchar型文字列に変換します jstring js = env->NewString(buffer, len);

delete []buffer;return js;}(6) Java で呼び出すことができる dll ファイルをコンパイルして生成します (2 番目のステップで生成されたクラスを使用する必要があります)。 :)

VC で作成した EXE ファイルの DLL ファイルを作成し、この EXE から DLL を呼び出す方法

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 サイトの他の関連記事を参照してください。

声明:
この記事はdocexcel.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。