森さん、情報ありがとうございます。
なるほど、確かに早田さんのJNIのサンプルで作るDLLは
cygwin1.dllを使用していますね。サンプルも動く
ことを確認できました。
違いを考えてみると、私の試したやり方は、DLL
の事前ロード(こう言い方でよいのかしら?)で、
おそらくJavaのVMはDLLをLoadLibrary APIを使って
遅延ロードする方法だと思いましたので、次のような
プログラムを作って実験してみましたところうまくいき
ました。(なお、testdll.dllはgccで作ったDLLです)
---------------------------------------------
#include <stdio.h>
#include <windows.h>
int main()
{
HMODULE hLibrary;
void (*pfnTestFunc)(void);
hLibrary = LoadLibrary("testdll.dll");
pfnTestFunc = (void (*)(void))GetProcAddress(hLibrary, "testfunc");
pfnTestFunc();
return 0;
}
---------------------------------------------
なぜ、この方法ならばうまくいくのかが分かっていませんが、
592で書いたような変なやり方をしなくても良いことが分かって
よかったです。ありがとうございました。
|