最近一个项目遇到要调用dll  第三方的dll 名称为HG_Interface  方法为:long start(Interface *p_inter, char *FUNC_ID)  不知道怎么调用,主要是参数:Interfae *p_inter怎么处理?基本数据类型的指针 能够处理成功了,我都搞了好多天了,找了很多列子不过都没有类似于start(Interface *p_inter, char *FUNC_ID) 的而且是第三方的dll ,虽然没有给多少分但是真的没有分数.先谢谢了

解决方案 »

  1.   

    谢谢,我现在都在怀疑到底能不调用,希望大家帮助讨论一下,在线等,我同事用delphi能够调用的
      

  2.   

    java要调用dll得先用jni封装一下, 没听说可以直接用的
      

  3.   

    这些工作我都已经做了,,而且能够调用了
    就是参数Interface *p_inter  问题急急啊
      

  4.   

    你得先搞清楚Interface是个什么类型
      

  5.   

    对没给什么类型啊,在说明里头说Interface *p_inter  可以用long 类型代替(pb,vb)没说java  我试了可是还是不行啊,,,这是我写的
     #include <stdio.h>   
      #include   <windows.h>   
     // #include   <string.h>   
      #include   "dll_TestStart.h"     
        
      #include "jni.h"//typedef struct     {
       //char  name[ 256 ];
       // int  serial;
    //} DiskInfo;//typedef long (_stdcall* newinterfacewithinit)(char *Addr, int Port, char *Servlet);   
     typedef long (_stdcall* start)(long p_inter, char *FUNC_ID);    
     
    //typedef UINT (CALLBACK* start)(char *); 
    JNIEXPORT jlong JNICALL Java_dll_TestStart_start
     (JNIEnv *env, jclass jcl, jlong p_inter, jstring FUNC_ID)
    {
        //jclass objClass = (env)->FindClass("java/lang/Object");
    //jobject p_inter_1 = (*env)->FindClass(" p_inter"); // const char* p_inter_1 = (*env)->GetStringUTFChars( env, p_inter, 0 );
       const char* servlet_1=(*env)->GetStringUTFChars( env, FUNC_ID, 0 );   HINSTANCE   hTest;   
       start Xianshi_dll  ;
      //ID_Read   pRead;   
      long zz;
      //int j;
       
      hTest=LoadLibrary("HG_Interface.dll");   
     
      if(hTest!=NULL){
      
      Xianshi_dll =(start)GetProcAddress(hTest,"start");   
      
      }
      //  FreeLibrary(hTest);  
    //printf(" diao yong fail  \n d%",max_12);
      if (Xianshi_dll ==NULL)   
        {   
            FreeLibrary(hTest);     
            printf("Xianshi dll link failed\n");   
            return "";    }
      else{
               printf("fang fa bei tiao yong liao");
               zz=Xianshi_dll(p_inter,servlet_1);   
                
               FreeLibrary(hTest); 
      
               return  (jint)zz;    }  //(*env)->ReleaseStringUTFChars( env, p_inter, p_inter_1 );
      (*env)->ReleaseStringUTFChars( env, FUNC_ID, servlet_1 );
     
    }
      

  6.   

    java是按引用传递参数的,把 Interfae *p_inter 改为 Interfae p_inter 应该可以吧?
      

  7.   

    jni还没学。。郁闷。。帮你顶顶。。
      

  8.   

    你的 Interface sizeof()一下看看多少个字节,找到装得下的数据类型替代就行,只认字节,数据类型不需要你完全去匹配,因为C++中转型是非常灵活的
      

  9.   

    首先谢谢你的回答
    虽然没有分但是
    能不能说具体点你的意思是数据类型,无关,我不知道怎么用Interface sizeof() 得到多少个字节,因为,Interface  * p_inter  在 dll里面就是个声明,另外我就没任何关于它的信息了,,