日期:2014-05-17  浏览次数:20752 次

JNA调用dll的问题,希望大家能帮帮忙
#include "Stdafx.h"
#include "NetSupportAPI.h"
/**
 * 打开清单工程文件
 * @param [in] filePath 文件路径
 * @return 返回工程文件对象地址
 */
int __stdcall BillAPI_OpenProjectFile(PCTSTR filePath)
{
return 10086;
}

这上面是写好的C++代码,已经生成了BwBillNetSupport.dll文件,现在要在JAVA中调用这个文件,在控制台输出10086即可,应该如何实现呢,用JNA实现么,如果用JNA实现,具体如何实现,最好能贴上实现代码,还有这个BwBillNetSupport.dll应该放在工程哪里?大家帮个忙
------解决方案--------------------
还是用JNative,这个比较简单,项目在这里http://sourceforge.net/projects/jnative/files/jnative/
参照这个一步步做就可以了
http://tvjody.iteye.com/blog/125643
这是你那个dll的测试程序,很简单
package com.df.ljh;


import java.util.logging.Level;
import java.util.logging.Logger;

import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;

public class CallDllTest {


    public static void main(String[] args)
    {
     System.load("D:/BwBillNetSupport.dll"); //加载dll
    
        try {
            JNative openCamera = new JNative("D:/BwBillNetSupport.dll", "BillAPI_OpenProjectFile"); //加载函数
            openCamera.setRetVal(Type.INT); //设置返回值类型
            openCamera.invoke(); //执行
            System.out.println(openCamera.getRetValAsInt());
        } catch (Exception ex) {
            Logger.getLogger(CallDllTest.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
}