调用一个简单的C++;来自java的VS6函数
我在VisualStudio6中制作了一个简单的函数,这是代码调用一个简单的C++;来自java的VS6函数,java,c++,dll,jna,Java,C++,Dll,Jna,我在VisualStudio6中制作了一个简单的函数,这是代码 #include "stdafx.h" BOOL APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) { return TRUE; } extern "C" __declspec(dllexport) char __stdcall GetCompanyCode() { return 1; } 我需要从jav
#include "stdafx.h"
BOOL APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
return TRUE;
}
extern "C" __declspec(dllexport) char __stdcall GetCompanyCode()
{
return 1;
}
我需要从java调用函数GetCompanyCode,所以我使用了JNA
首先,我用java创建接口
package javaapplication4;
import com.sun.jna.Library;
/**
*
* @author amir
*/
public interface CompanyCode extends Library
{
public byte GetCompanyCode();
}
然后加载dll
import java.io.FileNotFoundException;
import java.io.IOException;
import com.sun.jna.Native;
import java.security.NoSuchAlgorithmException;
import java.sql.SQLException;
/**
*
* @author amir
*/
public class JavaApplication4
{
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException, FileNotFoundException, NoSuchAlgorithmException
{
System.setProperty("jna.library.path", "C:/");
CompanyCode Company= (CompanyCode)Native.loadLibrary("CompanyCode", CompanyCode.class);
byte x=Company.GetCompanyCode();
System.out.println(x);
}
}
我弄错了
线程“main”java.lang.UnsatifiedLinkError中出现异常:错误
查找函数“GetCompanyCode”:指定的过程可能会失败
找不到
位于com.sun.jna.Function.(Function.java:179)
com.sun.jna.nativellibrary.getFunction(nativellibrary.java:347)位于
com.sun.jna.nativellibrary.getFunction(nativellibrary.java:327)位于
com.sun.jna.Library$Handler.invoke(Library.java:203)位于
com.sun.proxy.$Proxy0.GetCompanyCode(未知源)位于
javaapplication4.javaapplication4.main(javaapplication4.java:28)
C:\Users\amir\AppData\Local\NetBeans\Cache\8.2\executor snippets\run.xml:53:
Java返回:1生成失败(总时间:0秒)
<>我应该怎么办? <代码>外“c”<代码>不是C,而是C++。它也不会使函数成为C函数,只会更改接口(ABI和命名约定)。虽然没有直接关系,但下一步您会遇到这个问题:因为您使用的是u stdcall,所以需要从
StdCallLibrary
扩展,而不是Library