You may have noticed the call to dual.Release in
the Create example. The tlb2java superclass
IUnknown includes a call to Release in
its finalize method. However, for Apartment Model
COM objects the finalize method may not be able to
call Release because finalizers are normally run
from a special thread.
If IUnknown is able to determine a thread
Apartment that that owns the interface its finalize
method will try to call Release on that
thread. Otherwise, you will receive a COMException: Call
on wrong thread, if Apartment Thread checking is
turned on (see -check_apartment).
It is a good idea to include the Release call in
the finally part of a try/finally block.
Dual dual = new Dual();
try {
useDual(dual);
} finally {
dual.Release();
}
You can learn more about using Apartment Model Threading with tlb2java here.