2016-07-18 12 views
-1

Ich möchte wissen, wie Sie eine Funktion in einer Header-Datei aufrufen.Aufruf einer Funktion in einer Header-Datei

Zum Beispiel ..

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(); 

Ich möchte npt_GerVer() Funktion in calling.c JNI Datei

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; 
} 

Wie Sie sehen können anrufen, ich will „npt_GerVer() Funktion aufrufen "in Java_FingerPrintJNI_GetVer-Funktion. Wie kann ich das tun?

+0

Das ist nicht, wie Header verwendet werden sollen, weder in C noch in C++. Obwohl C++ komplexere Regeln hat. Sie sind verschiedene Sprachen. Nennen Sie Ihr tatsächliches Problem und wählen Sie ** eine der Sprachen. Lesen Sie ein Buch/Tutorial für diese Sprache. – Olaf

+0

@Olaf Sorry Es ist mein Fehler. Ich habe calling.h in calling.c geändert. :) – Anderson

Antwort

2

Eine Funktion wird auf die gleiche Art und Weise aufgerufen, egal ob sie in einer Header-Datei oder in der eigentlichen Übersetzungseinheit deklariert ist.

In diesem Fall:

npt_GetVer(); 

Das ist es. Es spielt keine Rolle, wo die Funktion deklariert wird, solange sie vor der Verwendung oder Referenz deklariert wird.

Die einzige Voraussetzung ist, dass die Header-Datei enthalten ist. Während der Vorverarbeitungsphase werden alle Headerdateien logisch unter ihrer #include-Referenz eingefügt, als ob der Inhalt der Headerdatei die #include-Anweisung logisch ersetzt. Das Endergebnis ist eine einzelne C++ Übersetzungseinheit.

Wenn Sie alle #include-Anweisungen manuell durch den Inhalt der entsprechenden Header-Dateien ersetzen (Bedacht auf bedingte Kompilierung, Wächter usw.), ist das Endergebnis genau gleich.

Ihre ursprüngliche Frage wurde markiert C++, aber Sie beziehen sich auf C; dies gilt jedoch gleichermaßen für oder C++.

+1

Gute Antwort, aber Sie sollten die Tatsache hinzufügen, dass Sie auch die Objektdatei oder die Bibliotheksdatei verknüpfen müssen, die diese Funktion enthält, oder Sie erhalten eine nicht definierte Referenz, wenn das Programm verknüpft ist. –

Verwandte Themen