是这样的,我要用我们的java程序调用一个C写的dll。我也看过jni的资料,理论上了解了,但实操了下问题还真多。
    我的java类是这样的:
    package com.test;    public class TestNative {
public static native long OltpTransData(long msgType,long packageType,long packageLength,String str,String com);
    }    然后我按照jni上说得调用javah程序生成了com_test_TestNative.h头文件,然后自己编写对应的com_test_TestNative.c源文件,其内容如下:
    ----------------------------------------------------------
    #include "com_test_TestNative.h"
    #include<stdio.h>    JNIEXPORT jlong JNICALL Java_com_inca_medicineInsurance_dalian_jiekou_DalianMedicineNative_OltpTransData
(JNIEnv *, jclass, jlong, jlong, jlong, jstring, jstring){
printf("test success!!!");
    }
    ------------------------------------------------------------
    (方法里只是打印了一条语句,我目前只是项测试下我的java程序调用C的dll是否成功)
    然后我使用如下语句进行编译:
    cl -I%java_home%\include -I%java_home%\include\win32 -LD com_test_TestNative.c -Fetest.dll    执行上面编译语句的时候,报错如下:
    Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
    Copyright (C) Microsoft Corp 1984-1998. All rights reserved.    com_test_TestNative.c
    com_test_TestNative.c(6) : error C2055
    : expected formal parameter list, not a type list    这里出错的地方应该是指上面的C源文件中的那个方法的方法列表有问题,可是我查资料均未对此处应该如何修改有更多的说明。那我兄弟知道这里应该如何修改么?不胜感谢!

解决方案 »

  1.   


     JNIEXPORT jlong JNICALL Java_com_inca_medicineInsurance_dalian_jiekou_DalianMedicineNative_OltpTransData
    (JNIEnv *env, jclass clazz, jlong msgType, jlong packageType, jlong packageLength, jstring jstrStr, jstring jstrCom){
         printf("test success!!!\n");
         return 0;
      }
      

  2.   

    简单理解你就把生成的.h头文件当成java里的借口,然后在你的.c源码里实现接口里面的方法,就是把.h里面申明的方法copy到.c文件里实现就行了。。
      

  3.   

    感谢一楼兄弟,还是对C的开发不是很熟,直接把头文件的方法签名给copy过来了。
    也感谢三楼的兄弟提醒了我:)
    给分