Domanda

Io gestire il progetto per JNI per i compilatori:MSVC++ 8.0 e 9.0, il mio cpp file contiene le seguenti attuazione:extern "C" { JNIEXPORT jlong JNICALL Java_context_ServiceProviderContext_startserviceprovider (JNIEnv * env, jclass, jstring jspath){ .....}

Con l'aiuto di depends.exe utilità vedo che MSVC 8.0 con successo le esportazioni funziona come dovrebbe: Java_context_ServiceProviderContext_startserviceprovider Ma la compilazione in MSVC 9.0 mi fa impazzire è esportazioni, ignorando extern "C" a tutti.depends.exe mi mostra: _Java_context_ServiceProviderContext_startserviceprovider@12

Qualcuno sa che cosa esattamente 9.0 progetto che la causa di questo comportamento?

È stato utile?

Soluzione

JNICALL è probabilmente #define JNICALL __stdcall.Modifica la convenzione di chiamata per risolvere il nome di decorazione, ma orribilmente (tra cui silenziosamente) pausa JNI, come sarà chiamata a una funzione assumendo __stdcall e ottenere qualcos'altro.

Non è in realtà non funziona?Da quello che posso google sembra che la JVM sa come decorare i nomi delle funzioni correttamente.

Altri suggerimenti

Che __stdcall convenzione di chiamata;hai bisogno __cdecl.Magari prova ad aggiungere __cdecl di una funzione definizione?

In alternativa, modificare la convenzione di chiamata predefinita nelle impostazioni del progetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top