что не так в моей C-программе? - PullRequest
1 голос
/ 13 апреля 2010

файл 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 ]

10 голосов
/ 13 апреля 2010

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

#define HINSTANCE "hDll"

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

HINSTANCE hDll;   //DLL句柄 

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

"hDll" hDll;

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

2 голосов
/ 13 апреля 2010

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

2 голосов
/ 13 апреля 2010

удалить

#define HINSTANCE "hDLL"

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

#include "stdafx.h" // moved up
#include <iostream>
#include <jni.h>
#include "Hello.h"
#include "windows.h"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...