2010-04-13 69 views
1

一个CPP文件:我的C程序有什么问题?

#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,"[email protected]"); 
    if(print_!=NULL) 
    { 

    print_(); 
    } 
    FreeLibrary(hDll); 
    } 
return 0; 

} 

//有什么不对,它打印: http://i983.photobucket.com/albums/ae311/keatingWang/c_wrong.png 未声明的标识符是指:未声明的标识符

+0

你更可能通过错误号(C,然后是一堆数字)寻找帮助,然后是实际信息,特别是如果它不是英文的话。 – MiffTheFox 2010-04-13 05:15:42

+0

如果您更改了代码,请更新图片 – 2010-04-13 07:47:58

+0

如果您坚持使用源代码中的32-127 ASCII子集(阅读:坚持使用英语),您会为我们和您自己一个忙。这是程序员沟通的语言,尽管它吸引喜欢不同语言的人们喜欢你和我。 – wilhelmtell 2010-04-13 07:57:26

回答

10

考虑宏:

#define HINSTANCE "hDll" 

及其用途:

HINSTANCE hDll; //DLL句柄 

预处理它看起来像后:

"hDll" hDll; 

这显然是错误的,因为它使hDll未申报为"hDll"是不是有效的类型。

+0

删除#define HINSTANCE“hDll” 仍然有问题 – 2010-04-13 05:53:08

+0

具体的东西?告诉我们什么是错的。 – nos 2010-04-13 17:19:52

2

删除

#define HINSTANCE "hDLL" 

要删除C4627警告,向上移动#include "stdafx.h"顶端(为第一的#include)由Mike Dinsdaleanswer所示。这可能会解决错误LoadLibraryGetProcAddressFreeLibrary

#include "stdafx.h" // moved up 
#include <iostream> 
#include <jni.h> 
#include "Hello.h" 
#include "windows.h" 
2

难道是一个预编译的头的问题?有了一些项目设置,VC++会跳过#include "stdafx.h"之前的东西,我认为这可能是C4627警告的原因。您是否尝试过在您的其他#include之前移动#include "stdafx.h"