extern “C” n'a aucun effet sur msvc++ 9.0
-
20-09-2019 - |
Question
- Je gérer le projet pour JNI pour les deux compilateurs:MSVC++ 8.0 et 9.0, mon fichier cpp contient de mise en œuvre suivants:extern "C" { JNIEXPORT jlong JNICALL Java_context_ServiceProviderContext_startserviceprovider (JNIEnv * env, jclass, jstring jspath){ .....}
Avec l'aide de depends.exe utilitaire je peux voir que MSVC 8.0 avec succès des exportations de fonctionner comme il le devrait: Java_context_ServiceProviderContext_startserviceprovider Mais la compilation sous MSVC 9.0 me rend fou il exportations comme le non-respect extern "C" à tous.depends.exe montre moi: _Java_context_ServiceProviderContext_startserviceprovider@12
Quelqu'un sait ce qu'exactement dans 9.0 projet qui provoque ce comportement?
La solution
JNICALL
est probablement #define JNICALL __stdcall
.La modification de la convention d'appel fixe la décoration de nom, mais il va horriblement (y compris en mode silencieux) pause JNI, car il sera l'appel d'une fonction en supposant __stdcall
et autre chose.
Est-ce que ça ne fonctionne pas?De ce que je peux google, il semble que la JVM sait comment décorer les noms de fonction correctement.
Autres conseils
C'est __convention d'appel stdcall;vous avez besoin d' __cdecl.Peut-être essayer d'ajouter __cdecl à votre fonction de la définition?
Vous pouvez également modifier la convention d'appel par défaut dans les paramètres du projet.