cpp文件:
#include <iostream>
#include <jni.h>
#include "Hello.h"
#include "windows.h"
#include "stdafx.h"
typedef void(__stdcall *Print_)();
int main(){
HINSTANCE hDll; //DLL句柄
Print_ print_; //函数指针
hDll = LoadLibrary("Hello.dll");
if (hDll != NULL)
{
print_ = (Print_)GetProcAddress(hDll,"Java_Hello_sayHello@8");
if(print_!=NULL)
{
print_();
}
FreeLibrary(hDll);
}
return 0;
}
//出现问题,打印出来: http://i983.photobucket.com/albums/ae311/keatingWang/c_wrong.png 未声明的标识符表示:未声明的标识符
答案 0 :(得分:10)
考虑宏:
#define HINSTANCE "hDll"
及其用途:
HINSTANCE hDll; //DLL句柄
预处理后,它看起来像:
"hDll" hDll;
这显然是一个错误,因为hDll
未声明,因为"hDll"
不是有效类型。
答案 1 :(得分:2)
除去
#define HINSTANCE "hDLL"
要删除C4627警告,请按Mike Dinsdale的answer所示向上移动#include "stdafx.h"
到顶部(成为第一个#include)。这可能会解决LoadLibrary
,GetProcAddress
和FreeLibrary
:
#include "stdafx.h" // moved up
#include <iostream>
#include <jni.h>
#include "Hello.h"
#include "windows.h"
答案 2 :(得分:2)
这可能是预编译的头问题吗?对于一些项目设置,VC ++将跳过#include "stdafx.h"
之前的内容,我认为这可能是您获得C4627警告的原因。您是否尝试过将#include "stdafx.h"
移到其他#include
之前?