2012-04-03 17 views
1

Ich erhalte einen "Fehler LNK1104: Datei {Pfad} \ jvm.lib" kann nicht geöffnet werden, wenn versucht wird, ein VS C++/CLI (verwaltetes) Projekt zu kompilieren. Es ist sehr einfach und mein Ziel ist es, einige Java-Methoden in bereits bestehenden Java-Bibliotheken zu nennen - hier ist der Code Ich verwende:Java-Methoden aus Visual C/C++ mit C++/CLI aufrufen

// This is the main DLL file. 

#include "stdafx.h" 
#include <jni_md.h> 
#include <jni.h> 
#include "JBridge.h" 

#pragma once 

using namespace System; 

namespace JBridge 
{ 

public ref class JniBridge 
{ 
    // TODO: Add your methods for this class here. 


public: 
    void HelloWorldTest() 
    { 
     System::Console::WriteLine("Hello Worldl from managed C++!"); 
    } 

    JNIEnv* create_vm(JavaVM ** jvm) 
    { 
     JNIEnv *env; 
     JavaVMInitArgs vm_args; 

     JavaVMOption options; 
     //Path to the java source code  
     options.optionString = "-Djava.class.path=D:\\Java Src\\TestStruct"; 
     vm_args.version = JNI_VERSION_1_6; //JDK version. This indicates version 1.6 
     vm_args.nOptions = 1; 
     vm_args.options = &options; 
     vm_args.ignoreUnrecognized = 0; 

     int ret = JNI_CreateJavaVM(jvm, (void**)&env, &vm_args); 
     if(ret < 0) 
      printf("\nUnable to Launch JVM\n");  
     return env; 
    } 
    }; 
} 

ich die Datei überprüft habe sich in der Pfadposition existieren und ich Ich habe es den Projekteigenschaften für die Seiten include dir und linker property hinzugefügt.

Aktualisieren Haben Sie die jvm.lib mit ein bisschen mehr fiedeln verbunden werden.

Compilation verursacht folgende Fehler während Build:

Fehler 1 Fehler LNK2028: nicht aufgelöste Token (0A00000A) "extern "C" long __stdcall JNI_CreateJavaVM (struct JavaVM_ * *, void * *, void *)" (JNI_CreateJavaVM @@ $$ J212YGJPAPAUJavaVM _ @@ PAPAXPAX @ Z) referenziert in der Funktion "struct JNIEnv_ * __cdecl create_vm (Struktur JavaVM_ * *)" (? Create_vm @@ $$ FYAPAUJNIEnv _ @@ PAPAUJavaVM _ @@@ Z) c: \ Temp \ CLRTest \ JBridge \ JBridge \ JBridge.obj JBridge Fehler 2 Fehler LNK2019: nicht aufgelöstes externes Symbol "extern" C "lang __stdcall JNI_CreateJavaVM (Struktur JavaVM_ * *, void * *, void *)" (? JNI_CreateJavaVM @@ $$ J212YGJPAPAUJavaVM _ @@ PAPAXPAX @Z) referenziert in der Funktion "struct JNIEnv_ * __cdecl create_vm (Struktur JavaVM_ * *)" (? Create_vm @@ $$ FYAPAUJNIEnv _ @@ PAPAUJavaVM _ @@@ Z) c: \ Temp \ CLRTest \ jBridge \ jBridge \ JBridge.obj jBridge Fehler 3 Fehler LNK1120: 2 nicht aufgelöste externe c: \ temp \ CLRTest \ jBridge \ Debug \ JBridge.dll jBridge

+0

BTW - ich versuche, dies in x64 auszuführen, was die JVM ist ... – bbqchickenrobot

+0

Sieht aus wie es die jvm nicht finden kann. Haben Sie JAVA_HOME gesetzt, wenn Sie die Variable env verwenden? Haben Sie den JVM von seinem ursprünglichen Standort bewegt? –

+0

@Jason hat den Standort nicht verschoben, aber ich habe neu gestartet und es ist irgendwie weggegangen. Sehr komisch. Immer noch Fehler empfangen. – bbqchickenrobot

Antwort

1

Arbeits herum war es, die JVM dynamisch mit LoadLibrary ("path/to/jvm") zu laden; und dann die nativen Funktionen aufrufen.

+0

Ich kämpfe mit genau dem gleichen Problem - fügen Sie bitte einen Link zu einer kleinen funktionierenden Beispiel-App hinzu oder einen Link zu einem Blog-Eintrag, in dem die Dinge genauer ausgearbeitet sind. (Oder mailen Sie mir persönlich) – saunderl

+0

überprüfen Sie dies: http://www.codeproject.com/Articles/17352/JVM-Launcher – bbqchickenrobot