У меня есть один файл C++ dll. И я знаю методы, используемые в нем. Мне нужно вызвать эти методы из моего java-кода. У меня нет доступа к изменению файла DLL. Пожалуйста, предоставьте мне решение для этого.Как получить доступ к методу библиотеки C++ (DLL) в java
ответ
Я создал JavaCPP именно для этой цели. Я копировать/вставить некоторые примеры кода и объяснение на странице:
Наиболее распространенный случай использования включает в себя доступ к некоторой унаследованной библиотеке, написанную для C++, например, в файл с именем LegacyLibrary.h, содержащей этот C++ класса:
#include <string>
namespace LegacyLibrary {
class LegacyClass {
public:
const std::string& get_property() { return property; }
void set_property(const std::string& property) { this->property = property; }
std::string property;
};
}
чтобы получить работу с JavaCPP, мы можем легко определить класс Java, такие как этот, - хотя можно было бы использовать парсер для получения его из заголовка файла, как показано ниже:
import com.googlecode.javacpp.*;
import com.googlecode.javacpp.annotation.*;
@Platform(include="LegacyLibrary.h")
@Namespace("LegacyLibrary")
public class LegacyLibrary {
public static class LegacyClass extends Pointer {
static { Loader.load(); }
public LegacyClass() { allocate(); }
private native void allocate();
// to call the getter and setter functions
public native @StdString String get_property(); public native void set_property(String property);
// to access the member variable directly
public native @StdString String property(); public native void property(String property);
}
public static void main(String[] args) {
// Pointer objects allocated in Java get deallocated once they become unreachable,
// but C++ destructors can still be called in a timely fashion with Pointer.deallocate()
LegacyClass l = new LegacyClass();
l.set_property("Hello World!");
System.out.println(l.property());
}
}
В качестве альтернативы мы можем создать интерфейс Java разбора заголовка файла с классом конфигурации, такие как этот:
@Properties(target="LegacyLibrary", [email protected](include="LegacyLibrary.h"))
public class LegacyLibraryConfig implements Parser.InfoMapper {
public void map(Parser.InfoMap infoMap) {
}
}
И следующие команды создания:
$ javac -cp javacpp.jar LegacyLibraryConfig.java
$ java -jar javacpp.jar LegacyLibraryConfig
$ javac -cp javacpp.jar LegacyLibrary.java
$ java -jar javacpp.jar LegacyLibrary
Для более сложных примеров, включая Maven/IDE интеграции, проверить JavaCPP Presets!
Отличная работа! Я очень рад узнать ваш инструмент JavaCPP, потому что раньше я сталкивался с подобной проблемой. Я потрачу некоторое время на изучение этого! Спасибо! –
BTW, может ли JavaCPP вызывать функции в DLL-файле непосредственно в Java-коде, учитывая, что я не знаю деталей этой DLL. –
@AnnieKim Нам нужен хотя бы заголовочный файл и компилятор C++, но все остальное довольно автоматизировано. –
- 1. Доступ к C# методу в DLL из Java
- 2. Как получить доступ к методу Java в приложении C++
- 3. Как получить доступ к методу?
- 4. Доступ к Java-методу
- 5. Доступ к методу .NET dll с использованием кода Java
- 6. Как получить доступ к DLL DLL в java // jsp
- 7. Java: Невозможно получить доступ к методу
- 8. Как получить доступ к методу класса в функции C++
- 9. Как получить доступ к внешней dll-функции?
- 10. Как получить доступ к почтовому java-методу в клиенте
- 11. Как получить доступ к методу во внешних классах в java?
- 12. Доступ к методу C# в функции JavaScript
- 13. Как получить доступ к классу dll C++ в коде C#
- 14. Как получить доступ к внутреннему методу объекта-потомка в C#
- 15. Как получить доступ к нестационарному методу из потока в C#
- 16. Как получить доступ к статическому методу в C#?
- 17. Как получить доступ к защищенному методу в C#
- 18. Как получить доступ к qbfc * .dll
- 19. Доступ к методу, определенному в суперклассе [Java]
- 20. Доступ к точке доступа при доступе к методу dll
- 21. Доступ к методу SpringBoardServices.h в объекте-c?
- 22. Как получить доступ к новому методу toggleHighlight?
- 23. Как получить доступ к методу вне проекта
- 24. Как позвонить/получить доступ к методу singleton?
- 25. Как получить доступ к методу MembershipProvider.GetPassword
- 26. Доступ к указателю ui из библиотеки (DLL)
- 27. Как получить доступ к закрытому методу
- 28. Как получить доступ к блоку, переданному методу?
- 29. Как получить доступ к методу replace() Doctrine?
- 30. Как получить доступ к частной собственности/методу?
http://stackoverflow.com/questions/14706193/how-to-access-a-method-of-c-library-dll-from-java – Reddy
вы также можете использовать Google «JNI». – alexbuisson
Вы не можете вызывать методы C++, экспортированные в dll с другого языка. C++ не имеет стандартного ABI, который позволяет это надежным способом. Вам придется «сгладить» методы C++ до C-интерфейса. – greatwolf