I have also adds a LIBS flag to the .pro file to tell QT where the JNI dll is located which looks like the following:

LIBS += "C:/Program Files/Java/jre1.8.0_65/bin/server/jvm.dll"

However, once I attempt to build my program I get an error saying "file not recognized: File format not recognized" on the .DLL file. Has anyone else got the JNI to work with QT? Am I doing something wrong?

It gave me this response: http://i.imgur.com/WDCfFhx.png
So I guess I do have the 64bit JNI? I'll have a look to see if there is a 32bit version. Or would it be easier to build my application as 64bit?

It's pretty straightforward: first run Qt's MaintenanceTool.exe app to add 64-bit Visual Studio 2013.
Then to select 64-bit build for your project, easiest is to remove the file ending with "pro.user" (like myprogram.pro.user) and next time you start Qt Creator you should be able to select the 64-bits build.

Thanks for the link, it doesn't do anything differently from the way I have everything coded at the moment though. I have all the same (or similar) code to set up the JVM and call Java functions, but my project wing build because of that undefined reference error. It doesn't seem to mention anything about .lib/.a files either, do I just need to add the location of the JVM.lib to the libs flag in the .pro file? Or is there more to it?

Aren't the -L flags only used in Linux systems? Or did I read that wrong?
OK so the problem might be the JVM.dll was compiled with a VS compiler and I'm trying to use it with the MinGW compiler? Is there a way to check what compiler the DLL was compiled with? Could I change the Compiler QT is using to the same one?

No this is just a regular windows application. There's a piece of code I'd like to use which is written in Java, I will perhaps look to convert it to C++ in the future but for now I'd just like to use the exisiting Java code.

@jsulm I tried using the DependencyWalker on the JVM.dll, but it gave me some very strange results. I got a LOT of missing DLLs for things like API-MS-WIN-*.dll as you can see from the images here: http://imgur.com/a/h1CvW

I just tried doing that, however my program will not run outside of QT for some reason? If I click the run button in QT the program executes fine (but then gives me the JVM error as before), but if I run the program from the command line or by double clicking on it I get an error saying:

The procedure entry point __cxa_throw_bad_array_new_length could not be located in the dynamic link library D:\My Documents\Qt Projects\build-PROGRAM-Desktop_Qt_5_5_1_MinGW_32bit-Release\debug\Qt5Core.dll

I have also tried it with the release version of my program but I get the same error.

Hi I think that error occurs because you copied the wrong Qt5Core.dll (from Qt Creators' bin directory) instead of the one in C:\Qt\5.5\mingw492_32\bin. Instead of copying manually, you could try windeployqt on your .exe file.

Managed to eventually get windeployqt to work, and that solved my entry point error so thank you! No idea why it wasn't accepting the DLLs that I had copied manually.

EDIT: I should add that windeployqt got rid of both the Entry Point error I had, along with the unable to find native library error. I have no idea how it fixed them both, perhaps it gave me a different JVM.dll.