CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

救命啊~JNI问题~用了很多时间了,还是搞不好~

楼主dongdong715(美女追我八条街(抵制日货))2006-05-01 16:41:13 在 Java / J2SE / 基础类 提问

比如我有了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~  
  问题点数:50、回复次数:3Top

1 楼sswater(光杆兵)回复于 2006-05-02 01:04:51 得分 20

dll   不是放在   "class   文件同目录",而是   "java.library.path"   指向的目录Top

2 楼dongdong715(美女追我八条街(抵制日货))回复于 2006-05-02 14:32:31 得分 0

那是放在哪里?为什么我的一个简单的例子放在和CLASS同等目录下面却可以   ?  
  Top

3 楼sswater(光杆兵)回复于 2006-05-03 03:54:06 得分 30

比如   dll   放在   d:\  
   
  那么,运行时格式为:  
  java     -Djava.library.path=D:\       yourclass  
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:dongdong715
  • sswater
  • sswater

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo