2015-02-18 2 views
0

У меня есть удаленная машина, на которой установлено приложение, и имеет свои API-интерфейсы, написанные на C, скомпилированные в dll.Как загрузить библиотеку dll удаленно?

Я хочу взаимодействовать с приложением, используя API-интерфейсы, открытые путем загрузки DLL через JNA в java удаленно. то есть код моего клиента должен загрузить DLL на целевой машине и взаимодействовать с приложением.

Я изучил возможность использования JMI, но это добавляет больше сложности.

Как загрузить DLL-файлы удаленно с помощью JNA/JNI?

+0

Для приема соединений необходим сервер на удаленном компьютере. – SLaks

+0

@SLaks Можете ли вы предоставить более подробную информацию о том, какой сервер? – bram

+0

Вам не нужен * сервер на удаленном компьютере, но это, вероятно, лучшая архитектура. Приложения, которые полагаются на общие диски для данных, достаточно хрупкие, но приложения, которые полагаются на общие диски для кода, просто требуют неприятностей. – EJP

ответ

0

Вы можете указать расположение соответствующей DLL. Я работаю над проектом, который требует аналогичных функций. См. Код ниже. После того как вы поделились местоположением DLL на целевой машине с вашим клиентом, вы можете получить доступ к dll, указав путь, как показано ниже.

public class TestRemoteDll{ 
public native String readFile(); 


public static void main(String args[]){ 
    System.load("\\\\{Device's Name}\\Users\\Milan.AF\\Desktop\\RemoteDir\\Remotedll.dll"); 
    TestRemoteDll test = new TestRemoteDll(); 
    System.out.println("Calling native method!"); 
    String sum = test.readFile(); 
    System.out.println("Returned from Native Method"); 

    System.out.println(sum); 
} 

}

И убедитесь, что вы создаете DLL соответственно, а также (использование DLL файлы должны быть совместно с клиентом, а) .Вы должны указать расположение файлов подобным образом, когда вы создаете dll, как показано ниже.

#include "stdafx.h" 
#include "iostream" 
#include<string> 
#include <fstream> 
#include "Remotedll.h" 
using namespace std; 


string RemoteDll::readFile() { 
int sum=0,x; 
ifstream inFile; 
inFile.open("\\\\{Device's Name}\\temp\\intSum.txt"); 
if (!inFile) { 
    return "Failed to open file!"; 
     } 
while (inFile >> x) { 
    sum = sum + x; 
} 
inFile.close(); 
string str = to_string(sum); 
return "File operation successful! Sum =" + str ; 

}

Я надеюсь, что это помогает.

Смежные вопросы