Вызов методов Java из Visual C / C ++ с использованием C ++ / CLI - PullRequest
1 голос
/ 03 апреля 2012

Я получаю сообщение об ошибке "LNK1104: невозможно открыть файл {путь} \ jvm.lib" при попытке компилировать проект VS C ++ / CLI (управляемый).Это очень просто, и моя цель - вызвать некоторые методы Java в уже существующих 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;
    }
    };
}

Я проверил, что файл существует в пути иЯ добавил его в свойства проекта для страниц свойств include dir и linker.

Обновление Получил, что файл jvm.lib будет связан с немного большим количеством ошибок.

При компиляции возникают следующие ошибки:

Ошибка 1, ошибка LNK2028: неразрешенный токен (0A00000A) "extern" C "long __stdcall JNI_CreateJavaVM (struct JavaVM_ * *, void * *, void *)"(? JNI_CreateJavaVM @@ $$ J212YGJPAPAUJavaVM _ @@ PAPAXPAX @ Z), на который есть ссылка в функции" struct JNIEnv_ * __cdecl create_vm (struct JavaVM_ * *) "(? Create_vm @@ $$ FYAPAU@VJJVJ:)Temp \ CLRTest \ JBridge \ JBridge \ JBridge.obj JBridge Ошибка 2 ошибка LNK2019: неразрешенный внешний символ "extern" C "long __stdcall JNI_CreateJavaVM (struct JavaVM_ * *, void * *, void *)" (? JNI_CreateJavaVAG @ @ $@@ PAPAXPAX @ Z) упоминается в функции "struct JNIEnv_ * __cdecl create_vm (struct JavaVM_ * *)" (? Create_vm @@ $$ FYAPAUJNIEnv _ @@ PAPAUJavaVM _ @@@ Z) c: \ Temp \ CLRTest \ JB \ JBridge JBridge.obj JBridge Error 3 error LNK1120: 2 неразрешенных внешних кода c: \ temp \ CLRTest \ JBridge \ Debug \ JBridge.dll JBridge

1 Ответ

1 голос
/ 14 июня 2012

Обходной путь заключался в динамической загрузке JVM с использованием LoadLibrary («путь / к / jvm»); а затем вызывать нативные функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...