比如我有了JAVA文件.
public class TestNative{
private native void add(String str);
public static void main(String[] args) {
TestNative hh = new TestNative();
hh.add("QQ.exe");
} static {
System.loadLibrary("DLL_0305");
}
}其中add()的.C文件如下:
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
#include <jni.h>
JNIEXPORT void JNICALL Java_TestNative_add(JNIEnv *env,jobject obj,jstring cs)
{
char* WillStopName;
WillStopName=(char*)env->GetStringUTFChars(cs,0);
HANDLE hProcessSnap =NULL;
BOOL bRet=FALSE;
PROCESSENTRY32 pe32={0};
// Take a snapshot of all processes in the system.
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE) // Fill in the size of the structure before using it.
pe32.dwSize = sizeof(PROCESSENTRY32);
// Walk the snapshot of the processes, and for each process,
// display information.
if (Process32First(hProcessSnap, &pe32))
{
BOOL bGotModule = FALSE;
MODULEENTRY32 me32= {0};
do
{
HANDLE hProcess;
hProcess = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
strupr(pe32.szExeFile);
//char ProcessName[100];
//strcpy(ProcessName,WillStopName);
strupr(WillStopName);
if(strcmp(pe32.szExeFile,WillStopName)==0)
{
DWORD result=TerminateProcess( hProcess, 0 );
if(result!=0) {}
}
CloseHandle (hProcess);
}
while (Process32Next(hProcessSnap, &pe32));
}
else
bRet = FALSE;
// Do not forget to clean up the snapshot object.
CloseHandle (hProcessSnap); } 把javah TestNative中生成的.c文件加到VC项目中了,Java_TestNative_add()能顺利编译,把DLL放在和CLASS文件同等目录下运行缺不能得到正确结果.错误如下:Exception in thread "main" java.lang.UnsatisfiedLinkError: add
at TestNative.add(Native Method)
at TestNative.main(TestNative.java:7)
谁能指点指点????????THX~
public class TestNative{
private native void add(String str);
public static void main(String[] args) {
TestNative hh = new TestNative();
hh.add("QQ.exe");
} static {
System.loadLibrary("DLL_0305");
}
}其中add()的.C文件如下:
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
#include <jni.h>
JNIEXPORT void JNICALL Java_TestNative_add(JNIEnv *env,jobject obj,jstring cs)
{
char* WillStopName;
WillStopName=(char*)env->GetStringUTFChars(cs,0);
HANDLE hProcessSnap =NULL;
BOOL bRet=FALSE;
PROCESSENTRY32 pe32={0};
// Take a snapshot of all processes in the system.
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE) // Fill in the size of the structure before using it.
pe32.dwSize = sizeof(PROCESSENTRY32);
// Walk the snapshot of the processes, and for each process,
// display information.
if (Process32First(hProcessSnap, &pe32))
{
BOOL bGotModule = FALSE;
MODULEENTRY32 me32= {0};
do
{
HANDLE hProcess;
hProcess = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
strupr(pe32.szExeFile);
//char ProcessName[100];
//strcpy(ProcessName,WillStopName);
strupr(WillStopName);
if(strcmp(pe32.szExeFile,WillStopName)==0)
{
DWORD result=TerminateProcess( hProcess, 0 );
if(result!=0) {}
}
CloseHandle (hProcess);
}
while (Process32Next(hProcessSnap, &pe32));
}
else
bRet = FALSE;
// Do not forget to clean up the snapshot object.
CloseHandle (hProcessSnap); } 把javah TestNative中生成的.c文件加到VC项目中了,Java_TestNative_add()能顺利编译,把DLL放在和CLASS文件同等目录下运行缺不能得到正确结果.错误如下:Exception in thread "main" java.lang.UnsatisfiedLinkError: add
at TestNative.add(Native Method)
at TestNative.main(TestNative.java:7)
谁能指点指点????????THX~
java -Djava.library.path=D:\ yourclass