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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top