JNI 调用存在一些问题。我有一个.cpp
文件,其中包含佳能 sdk。我的 Java 类Check.java
有一个声明:
private native void check();
我的Check.cpp
文件:
#include "stdafx.h"
#include "iostream"
#include "EDSDK.h"
#include "Check.h"
using namespace std;
int check();
#define _CRT_SECURE_NO_WARNINGS
typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);
JNIEXPORT void JNICALL Java_Check_check (JNIEnv *, jobject){
check();
}
int check(){
HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
hDLL = LoadLibrary("EDSDK.dll");
EdsError e = EdsInitializeSDK();
}
基本上我的Check.cpp
文件只是初始化相机。调用时:
cl -I "C:\jdk1.7\include" -I"C:\jdk1.7\include\win32" /EHsc -LD Check.cpp -FeCheck.dll
它抛出错误
Check.obj:错误 LNK2019:函数“int __cdecl check(void)”(?check@@YAHXZ) 中引用的未解析外部符号_imp _EdsInitializeSDK @0
同样,在调用任何相机函数时,都会引发类似的错误。问题是什么?作为一个独立的文件Check.cpp
效果很好。