我的C程序有什么问题?

时间:2010-04-13 05:11:49

标签: c

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 未声明的标识符表示:未声明的标识符

3 个答案:

答案 0 :(得分:10)

考虑宏:

#define HINSTANCE "hDll"

及其用途:

HINSTANCE hDll;   //DLL句柄 

预处理后,它看起来像:

"hDll" hDll;

这显然是一个错误,因为hDll未声明,因为"hDll"不是有效类型。

答案 1 :(得分:2)

除去

#define HINSTANCE "hDLL"

要删除C4627警告,请按Mike Dinsdaleanswer所示向上移动#include "stdafx.h"到顶部(成为第一个#include)。这可能会解决LoadLibraryGetProcAddressFreeLibrary

的错误
#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之前?