2016-07-18 5 views
-1

Я хочу знать, как вызвать функцию в файле заголовка.Вызов функции в файле заголовка

Например ..

example.h 

#ifndef NPT_IMM32_H 
#define NPT_IMM32_H 

#ifndef NPT_API 
    #ifdef _THIS_IS_IMPLE_ 
     #define NPT_API  __declspec(dllexport) 
    #else 
     #define NPT_API  __declspec(dllimport) 
    #endif 
#endif 

NPT_API char * __stdcall npt_GetVer(); 

Я хочу, чтобы вызвать функцию npt_GerVer() в calling.c JNI файле

calling.c 
#include <jni.h> 
#include <stdio.h> 
#include <stdbool.h> 
#include <windows.h> 

#include "example.h" 

JNIEXPORT void JNICALL Java_FingerPrintJNI_GetVer(JNIEnv *env, jobject thisObj){ 
    // Here How to call the npt_GerVer() function ? 
    return; 
} 

Как вы можете видеть, я хочу назвать «npt_GerVer функция() "в функции Java_FingerPrintJNI_GetVer. Как я могу это сделать?

+0

Это не то, как предполагается использовать заголовки, ни на C, ни на C++. Хотя у C++ есть более сложные правила. Это разные языки. Укажите свою актуальную проблему и выберите ** один язык. Чтение книги/учебника для этого языка. – Olaf

+0

@Olaf Извините, это моя ошибка. Я изменил call.h на call.c. :) – Anderson

ответ

2

Функция вызывается точно так же, как она объявлена ​​в заголовочном файле, или в самой строке перевода.

В этом случае:

npt_GetVer(); 

Вот так. Не имеет значения, где объявлена ​​функция, если она объявлена ​​до ее использования или ссылки.

Единственное требование - включить заголовочный файл. Во время фазы предварительной обработки все файлы заголовков логически вставлены в их ссылку #include, как если бы содержимое файла заголовка логически заменило оператор #include. Конечным результатом является единый блок перевода C++.

Если вы должны были вручную заменить все операторы #include содержимым соответствующих файлов заголовков (учитывая условную компиляцию, включить охранники и т. Д.), Конечный результат будет точно таким же.

Ваш оригинальный вопрос был помечен C++, но вы имеете в виду C; однако это относится также к C или C++.

+1

Хороший ответ, но вы должны добавить тот факт, что вам также нужно связать файл объекта или файл библиотеки, который содержит эту функцию, а также вы получите неопределенную ссылку, когда программа связана вместе. –

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