Storing C++ data in an instance field using CNI?
Bryce McKinlay
mckinlay@redhat.com
Wed May 26 16:17:00 GMT 2004
Stanley Brown wrote:
>>> is it possible using CNI to store C++ data in the object as an
>>> instance field?
>> As earlier mentioned the best way to do this is to store the struct
> address in a long java variable. Why long? Well, to be honest 64-bit
> systems will eventually become the norm which means you will probably
> have to convert your program later. Think ahead now and write it for
> 64 bit systems in mind since that will still work with 32 bit systems
> (just get alot of warnings during compilation about casting int to long).
If this is for CNI, the recommended type to use is RawData. This will be
pointer-length no matter what system you compile it on.
> Also remember to override the finalize method of your Java object that
> is storing the native struct to call a native method to free/delete
> the native struct. Very important!! If you dont do this C/C++ will
> not deallocate the memory reserved for your native struct when the
> Java class is GCed.
I'm thinking of adding something like "RawDataMarked" which would be
like RawData but would be checked by the GC. This way you could allocate
a native struct using JvAllocBytes(), and it would be automatically
freed when the Java object becomes unreachable. No need for a finalizer.
Thoughts? Anyone got an idea for a better name for it?
Regards
Bryce
More information about the Java
mailing list