2010-04-13 4 views
1

ПГКС файл:что случилось в моей программе на 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

+0

Пожалуйста, обновите изображение, если вы изменили код. –

+0

. Вы сделаете все возможное, если придерживаетесь 32-127 подмножества ASCII в своем исходном коде (читайте: придерживайтесь английского). Это языковые программисты общаются, насколько это отстой для таких людей, как вы и я, которые предпочли бы другой язык. – wilhelmtell

ответ

10

Рассмотрим макрос:

#define HINSTANCE "hDll" 

и его использование:

HINSTANCE hDll; //DLL句柄 

после предварительной обработки она будет выглядеть следующим образом:

"hDll" hDll; 

, который явно является ошибкой, поскольку это делает hDll необъявленная, как "hDll" не является допустимым типом.

+0

delete #define HINSTANCE "hDll" все еще что-то не так –

+0

Что-то конкретное? Расскажите нам, что случилось. – nos

2

удалить

#define HINSTANCE "hDLL" 

Чтобы удалить предупреждение C4627, двигаться вверх #include "stdafx.h" к вершине (чтобы быть первым #include), как указано Mike Dinsdale «ы answer. Это, вероятно, решить ошибку для LoadLibrary, GetProcAddress и FreeLibrary:

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

Может быть прекомпилируются вопрос заголовка? С некоторыми настройками проекта VC++ пропустит материал до #include "stdafx.h", что, я думаю, может послужить причиной предупреждений C4627, которые вы получаете. Вы пробовали переехать #include "stdafx.h" перед другим #include s?

Смежные вопросы