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

高分求:用过jni的朋友帮我看看偶的程序错在哪?

楼主solaris007()2005-02-04 08:38:06 在 Java / J2SE / 基础类 提问

高分求:用过jni的朋友帮我看看偶的程序错在哪?  
   
  #include   <stdio.h>  
  #include   "Java2DocdllAccess.h"  
   
  JNIEXPORT   jlong   JNICALL   Java_Java2DocdllAccess_Init  
      (JNIEnv   *env,   jobject   obj)  
  {  
            HINSTANCE   hDll=LoadLibrary("Maker.dll");  
            Java_Java2DocdllAccess_Init   pf   =GetProcAddress(hDll,"Init");  
            return   pf();  
            FreeLibrary(hDll);  
  }  
   
  JNIEXPORT   jlong   JNICALL   Java_Java2DocdllAccess_New  
      (JNIEnv   *env,   jobject   obj,   jstring   str1,   jstring   str2)  
  {  
            HINSTANCE   hDll=LoadLibrary("Maker.dll");  
            Java_Java2DocdllAccess_New   pf   =GetProcAddress(hDll,"New");  
            return   pf(str1,str2);  
            FreeLibrary(hDll);  
  }      
   
  说明:Maker.dll是一个c++的dll,由于偶只有这个dll,没有lib文件,所以偶只好在中间dll时,要调用它和它里面的函数,跪求用过的朋友帮看看,谢谢,正确一定给分! 问题点数:100、回复次数:10Top

1 楼solaris007()回复于 2005-02-04 08:40:06 得分 0

上面的程序是java2dll.c,偶老是编译不通过???Top

2 楼tabby(-_-b .. 内存泄漏)回复于 2005-02-04 08:45:28 得分 10

编译报什么错误??Top

3 楼GJA106(中文字符)回复于 2005-02-04 08:56:26 得分 35

楼主不好判断是什么错误,贴出编译异常。Top

4 楼mu_x(阿木)回复于 2005-02-04 08:59:13 得分 5

俺不会,占个座儿看看^_^Top

5 楼dvictor(大学之道 在明明德)回复于 2005-02-04 09:04:50 得分 5

关注Top

6 楼Jacky1206(胖胖,其实我不胖)回复于 2005-02-04 09:09:55 得分 20

贴出错误代码,是   UnSatisfiedLink   ?只要你有编译好的   dll   就可以了,至于   lib   是编译生成   dll   时候要用的吧,和   jni   没有关系的,只要能编译成功   dll   就可以了Top

7 楼EverythingMaster(catch(LowSalaryException e){mySalary += 10000000;})回复于 2005-02-04 09:26:41 得分 5

学习中。。。。。  
  Top

8 楼solaris007()回复于 2005-02-04 10:59:26 得分 0

这是偶的全部代码  
  t.c  
   
  #include   <stdio.h>  
  #include   "Java2DocdllAccess.h"  
   
  int   RunDllInit(char*   fileName)  
  {  
      void   (*MYPROC)(void);  
      HINSTANCE   hlib;  
      int   (*LOAD)(char*   fileName);//定义函数指针  
      int   retvalue;   //函数返回  
       
      LOAD   lpFunc;  
      hLib=LoadLibrary("Maker.dll");  
      if(hLib==NULL)  
      {  
              printf("exit   load   dll");  
              exit(-1);  
      }  
       
      AfxSetResourceHandle(hLib);    
        //调用name.dll的方法Abstract      
      lpFunc=(LOAD)GetProcAddress(hLib,"Init");  
      if(lpFunc==NULL)  
      {  
              printf("exit   load   fun");  
              exit(-1);  
      }  
   
      retvalue   =   (lpFunc)(fileName);  
      FreeLibrary(hLib);  
   
      return   retvalue;  
  }  
   
   
  JNIEXPORT   jlong   JNICALL   Java_Java2DocdllAccess_RunDllInit  
      (JNIEnv   *env,   jobject   obj)  
  {  
            return   RunDllInit();  
  }  
   
   
  int   RunDllNewDoc(char*   fileName)  
  {  
      void   (*MYPROC)(void);  
      HINSTANCE   hlib;  
      int   (*LOAD)(char*   fileName);//定义函数指针  
      int   retvalue;   //函数返回  
       
      LOAD   lpFunc;  
      hLib=LoadLibrary("Maker.dll");  
      if(hLib==NULL)  
      {  
              printf("exit   load   dll");  
              exit(-1);  
      }  
       
      AfxSetResourceHandle(hLib);    
        //调用name.dll的方法Abstract      
      lpFunc=(LOAD)GetProcAddress(hLib,"NewDoc");  
      if(lpFunc==NULL)  
      {  
              printf("exit   load   fun");  
              exit(-1);  
      }  
   
      retvalue   =   (lpFunc)(fileName);  
      FreeLibrary(hLib);  
   
      return   retvalue;  
  }  
  JNIEXPORT   jlong   JNICALL   Java_Java2DocdllAccess_NewDoc  
      (JNIEnv   *env,   jobject   obj,   jstring   str1,   jstring   str2)  
  {  
            return   RunDllNewDoc(str1,str2);  
  }      
  Top

9 楼solaris007()回复于 2005-02-04 11:00:51 得分 0

这是用VC调试的结果  
   
  --------------------Configuration:   t   -   Win32   Debug--------------------  
  Compiling...  
  t.c  
  c:\dll\t.c(7)   :   error   C2065:   'HINSTANCE'   :   undeclared   identifier  
  c:\dll\t.c(7)   :   error   C2146:   syntax   error   :   missing   ';'   before   identifier   'hlib'  
  c:\dll\t.c(7)   :   error   C2065:   'hlib'   :   undeclared   identifier  
  c:\dll\t.c(8)   :   error   C2143:   syntax   error   :   missing   ';'   before   'type'  
  c:\dll\t.c(9)   :   error   C2143:   syntax   error   :   missing   ';'   before   'type'  
  c:\dll\t.c(11)   :   error   C2065:   'LOAD'   :   undeclared   identifier  
  c:\dll\t.c(11)   :   error   C2146:   syntax   error   :   missing   ';'   before   identifier   'lpFunc'  
  c:\dll\t.c(11)   :   error   C2065:   'lpFunc'   :   undeclared   identifier  
  c:\dll\t.c(12)   :   error   C2065:   'hLib'   :   undeclared   identifier  
  c:\dll\t.c(12)   :   warning   C4013:   'LoadLibrary'   undefined;   assuming   extern   returning   int  
  c:\dll\t.c(13)   :   warning   C4047:   '=='   :   'int   '   differs   in   levels   of   indirection   from   'void   *'  
  c:\dll\t.c(16)   :   warning   C4013:   'exit'   undefined;   assuming   extern   returning   int  
  c:\dll\t.c(19)   :   warning   C4013:   'AfxSetResourceHandle'   undefined;   assuming   extern   returning   int  
  c:\dll\t.c(21)   :   error   C2146:   syntax   error   :   missing   ';'   before   identifier   'GetProcAddress'  
  c:\dll\t.c(21)   :   warning   C4013:   'GetProcAddress'   undefined;   assuming   extern   returning   int  
  c:\dll\t.c(22)   :   warning   C4047:   '=='   :   'int   '   differs   in   levels   of   indirection   from   'void   *'  
  c:\dll\t.c(28)   :   error   C2065:   'retvalue'   :   undeclared   identifier  
  c:\dll\t.c(28)   :   error   C2064:   term   does   not   evaluate   to   a   function  
  c:\dll\t.c(29)   :   warning   C4013:   'FreeLibrary'   undefined;   assuming   extern   returning   int  
  c:\dll\t.c(38)   :   error   C2198:   'RunDllInit'   :   too   few   actual   parameters  
  c:\dll\t.c(45)   :   error   C2146:   syntax   error   :   missing   ';'   before   identifier   'hlib'  
  c:\dll\t.c(46)   :   error   C2143:   syntax   error   :   missing   ';'   before   'type'  
  c:\dll\t.c(47)   :   error   C2143:   syntax   error   :   missing   ';'   before   'type'  
  c:\dll\t.c(49)   :   error   C2146:   syntax   error   :   missing   ';'   before   identifier   'lpFunc'  
  c:\dll\t.c(51)   :   warning   C4047:   '=='   :   'int   '   differs   in   levels   of   indirection   from   'void   *'  
  c:\dll\t.c(59)   :   error   C2146:   syntax   error   :   missing   ';'   before   identifier   'GetProcAddress'  
  c:\dll\t.c(60)   :   warning   C4047:   '=='   :   'int   '   differs   in   levels   of   indirection   from   'void   *'  
  c:\dll\t.c(66)   :   error   C2064:   term   does   not   evaluate   to   a   function  
  c:\dll\t.c(74)   :   warning   C4133:   'function'   :   incompatible   types   -   from   'struct   _jobject   *'   to   'char   *'  
  c:\dll\t.c(74)   :   warning   C4020:   'RunDllNewDoc'   :   too   many   actual   parameters  
  Error   executing   cl.exe.  
   
  t.obj   -   19   error(s),   11   warning(s)  
  Top

10 楼Jacky1206(胖胖,其实我不胖)回复于 2005-02-04 17:24:32 得分 20

可能是   vc   配置路径的先后问题,查看一下.现在的问题是出在   vc   编译生成   dll   出错,而不是   java   的问题,对于     vc   编译时引入   lib   的路径,有时候先后的次序不同可能会造成编译出错,检查一下.另外看看语法是否有问题!Top

相关问题

  • 高分求:用过jni的朋友帮我看看偶的程序错在哪?
  • 程序错在哪里呀?
  • 程序错在哪儿?!!!
  • 程序错在哪儿?
  • 我的程序错在什么地方?
  • 这段程序错在何处?
  • 看看程序错在那里?
  • 这段程序错在那里???高分
  • 我这段程序错在何处
  • 我这段程序错在何处

关键词

  • java2
  • 函数
  • dll
  • docdllaccess
  • hlib
  • lpfunc
  • rundllinit
  • hdll
  • jni
  • maker

得分解答快速导航

  • 帖主:solaris007
  • tabby
  • GJA106
  • mu_x
  • dvictor
  • Jacky1206
  • EverythingMaster
  • Jacky1206

相关链接

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

广告也精彩

反馈

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