2012-04-03 24 views
1

VS C++/CLI(管理対象)プロジェクトをコンパイルしようとすると「エラーLNK1104:ファイル{パス} \ jvm.libを開くことができません」というメッセージが表示されます。それは非常にシンプルだし、私の目標は、既存のJavaのLIBSに、いくつかのJavaメソッドを呼び出すことである - ここで私が使用しているコードです:C++/CLIを使用したVisual C/C++からのJavaメソッドの呼び出し

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

私はパスの場所に存在しないファイルを検証してきたと私は」インクルードディレクトリとリンカのプロパティページのプロジェクトプロパティに追加しました。

更新 jvm.libを少し手の込んだようにしました。ビルド中にエラーが発生し、次の

コンパイル原因:

エラー1つのエラーLNK2028:未解決のトークン(0A00000A) "のextern "C" 長い__stdcallのJNI_CreateJavaVM(構造体JavaVM_ * *、void *型*、void *型)"(のJNI_CreateJavaVM? (構造体JavaVM * *) "(?create_vm @@ $$ FYAPAUJNIEnv _ @@ PAPAUJavaVM _ @@@ Z)c:\ Temp \ CLRTest \関数の中で参照されている関数" struct JNIEnv_ * __cdecl create_vm(struct JavaVM * *) "で参照される@@ $$ J212YGJPAPAUJavaVM _ JBridge \ JBridge \ JBridge.obj JBridge エラー2エラーLNK2019:未解決の外部シンボル "extern" C "long __stdcall JNI_CreateJavaVM(struct JavaVM_ *、void * *、void *)"(?JNI_CreateJavaVM @@ $$ J212YGJPAPAUJavaVM _ @@ PAPAXPAX @Z)関数 "構造体JNIEnv_ * __cdecl create_vm(構造体JavaVM_ * *)"で参照されています(?create_vm @@ $$ FYAPAUJNIEnv _ @@ PAPAUJavaVM _ @@@ Z)C:\温度が\ CLRTest \ JBridge \ JBridge \ JBridge.obj JBridge エラー3エラーLNK1120:2個の未解決の外部のC:\の一時\ CLRTest \ JBridge \デバッグ\ JBridge.dll JBridge

+0

私はJVMが何であるかx64でこれを実行しようとしています... – bbqchickenrobot

+0

jvmが見つからないようです。 env変数を使用している場合、JAVA_HOMEを設定しましたか? jvmを元の場所から移動しましたか? –

+0

@ Jasonは場所を移動しませんでしたが、再起動して何とか離れました。非常に奇妙な。しかし、まだエラーを受信します。 – bbqchickenrobot

答えて

1

ワークLoadLibrary( "path/to/jvm")を使用して動的にJVMをロードすることでした。ネイティブ関数を呼び出します。

+0

私はまったく同じ問題に苦しんでいます。小さな作業サンプルアプリケーションへのリンクや、物事がより洗練されたブログエントリへのリンクを追加してください。 (または個人的に私に電子メールを送ってください) – saunderl

+0

これをチェックしてください:http://www.codeproject.com/Articles/17352/JVM-Launcher – bbqchickenrobot

関連する問題