我正在編寫一個C++ dll(Visual Studio中的文件擴展名是.cpp,但代碼是C),它使用JNI加載和調用某些Java類的實例方法。因此,我的項目由C++源代碼和頭文件以及一些Java類文件(通過JNI使用的Java對象的類文件)組成。我想創建一個包含Java類文件的單個dll庫「在一個包中」。是否有可能將C和Java文件都放到dll中?使用JNI的Java類的DLL
1
A
回答
1
這是完全可能的,但不一定直觀。我沒有測試過這個,但是如果你知道你在做什麼,我會想象它很容易工作。
首先,您需要一種方法將類文件的二進制文件打包到您擁有的本機二進制文件中,然後當然可以在任何時間點無縫讀取該塊。你如何實現這一點取決於你,沒有真正的「正確的方式」來做到這一點。這就是說,如果您可以獲得.class文件數據所在的內存句柄(加載DLL之後)並將其作爲byte[]
或ByteBuffer
傳遞給Java,那麼您可以使用任何一個的ClassLoader
的defineClass
過載以及呼叫findLoadedClass
,然後最後loadClass
。
這將允許您從幾乎任何數據源的類加載。正如我之前提到的那樣,您如何爲班級存儲/檢索本地數據取決於您。
相關問題
- 1. C++ JNI調用Java,使JNI調用到不同的C + + DLL
- 2. JNI問題:在Java中調用使用第三方DLL的dll
- 3. Java/JNI/MSVC java.lang.UnsatisfiedLinkError我的DLL函數
- 4. 加載JNI的Dll
- 5. 接口的Java使用JNI
- 6. 當Java進程退出時,由JNI DLL使用的內存是否被使用?
- 7. 將JNI dll嵌入到java中
- 8. 使用java JNI GetFieldID和JNI一般
- 9. 如何在Java項目中使用JNI處理DLL事件?
- 10. 使用MINGW建立一個JNI DLL
- 11. 使用Eclipse爲JNI構建DLL
- 12. jni打開cobol dll調用
- 13. 從JNI_CreateJavaVM調用使用來自VB6的JNI的dll時的JNI_ENOMEM
- 14. DLL需要永久加載在JNI類
- 15. JNI從兩個DLL讀取一個類
- 16. MAC + JNI + java的
- 17. Java和C++之間使用JNI的SharedBuffer
- 18. 如何使用JNI來更改java類的字段
- 19. JNI的Java應用程序
- 20. 無法使用JNI使用外部Java類
- 21. 無法使用JNI從java調用C++的成員函數使用JNI
- 22. 使用JNI派生類型
- 23. JAVA/JNI-加載循環依賴的本機DLL
- 24. Android和Java的JNI
- 25. Java的JNI麻煩
- 26. JNI system.loadlibrary問題 - 使用C庫的本地C++ dll
- 27. JNI - System.LoadLibrary()發現錯誤的依賴dll
- 28. 已簽名的Applets,JNI和DLL
- 29. jni中的dll負載異常
- 30. JNI:如何使用的GetMethodID因爲我要調用java用C雖然JNI getScanResults
您當然可以帶一些.class文件,將它們打包到一個或多個JAR中,並將它們作爲數據包含在DLL中。您甚至可以啓動用於在DLL中運行Java字節碼的JVM。不過,我不完全確定你是否能夠在沒有(暫時)將它們寫入磁盤的情況下讓JVM加載你的類。我會讓有更多關於JVM回答的人知道。 – Michael 2013-03-08 15:20:48
如果我將類文件添加爲「外部資源」,該怎麼辦? (我正在使用Microsoft Visual C++ 2010)。 – salvo 2013-03-08 15:22:40
只要您正確設置了JVM的類路徑,聲音就可以運行。我不會發誓,因爲這不是我嘗試過的。 – Michael 2013-03-08 15:30:45