wood burning stoves*
The moose likes Other JSE/JEE APIs and the fly likes JNI, Win32, and EXE resources Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Other JSE/JEE APIs
Bookmark "JNI, Win32, and EXE resources" Watch "JNI, Win32, and EXE resources" New topic
Author

JNI, Win32, and EXE resources

Corey Cole
Greenhorn

Joined: Sep 04, 2001
Posts: 5
I'm attempting to create yet another Java service tool. After looking at the source code that comes with the Microsoft Java SDK, I found that their jexegen/jntsvc programs bind string params into a string table and raw classfile data into RT_RCDATA resources within an exe.
After some google searching, I found some good examples on how to update/read resources. However, I'm stuck when it comes to
actually instantiating the class. When I try the IBM JVM, I get to the point where I load the class but can't find the methodID for the static "main" method. When I use the Sun JVM, I don't even get that far, and my call to DefineClass returns a NULL.
Here's the source to an analog program (no EXE/DLL resource stuff, but it's pretty damn close):

(yes, it's getting to be a hack job, and yes, it's silly
to hardcode classnames in there...)
Finally, the "Hello" class it refers to is just a simple
Hello World.
Any pointers would be greatly appreciated. Thanks.
Corey Cole
Greenhorn

Joined: Sep 04, 2001
Posts: 5
Not to answer my own question (mostly because I don't have an answer), but I've narrowed the problem down.
I wasn't checking for exceptions after each JNI call. When I check for exceptions after each call, both the IBM and Sun JVMs
fail at the same point. I guess the IBM JVM is a little more lenient than the Sun JVM.
Anyways, it appears the issue is my creation of the ClassLoader object. I've never really played with ClassLoaders in pure code, so it's possible I'm not creating the loader object in the correct context...
Corey Cole
Greenhorn

Joined: Sep 04, 2001
Posts: 5
And now the circle is complete...
I was being naive in trying to instantiate a ClassLoader
object via it's constructor. Yes, javap shows the ctor
inside the classfile, but the _real_ method you want to call is
"getSystemClassLoader".
Here's the sample code in working form:

And please, no making fun. I've been working on this
for 12 hours straight. What finally clued me in is the
Delphi(!?) source found here: http://home.pacifier.com/~mmead/jni/delphi/javadpr/javadpr_dpr.html
Regards, and thanks to the JavaRanch for letting me talk to myself.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: JNI, Win32, and EXE resources