Article ID: 202600
Article Last Modified on 6/14/2006
//JavaCOMClassA.java
/**
* @com.register ( clsid=39E0D51C-A704-11D1-9BAC-00A0C905438F, typelib=39E0D51A-A704-11D1-9BAC-00A0C905438F )
*/
public class JavaCOMClassA
{
public JavaCOMClassB GetB()
{
return new JavaCOMClassB();
}
}
Source File 2: JavaCOMClassB.java
//JavaCOMClassB.java
/**
* @com.register (clsid=39E0D51B-A704-11D1-9BAC-00A0C905438F,typelib=39E0D51A-A704-11D1-9BAC-00A0C905438F )
*/
public class JavaCOMClassB
{
private int m_iData = 5;
public void SetData(int iData)
{
m_iData = iData;
}
public int GetData()
{
return m_iData;
}
}
//Main.java
import com.ms.com.*;
import javacomclass.*;
public class Main
{
public static void main(String[] args)
{
int data;
try
{
JavaCOMClassA_Dispatch A = new JavaCOMClassA();
/**
* First, return a JavaCOMClassB user-defined COM object
* directly from JavaCOMClassA.GetB(). This should cause a
* ClassCastException when casting the Object to its appropriate
* disp interface.
*/
try {
Object obj = A.GetB();
JavaCOMClassB_Dispatch b = (JavaCOMClassB_Dispatch)obj;
}
catch(ClassCastException cce)
{
com.ms.wfc.util.Debug.println("ClassCastException calling JavaCOMClassA.GetB() directly");
}
/**
* This workaround uses the Object class returned from GetB() and
* the Static Dispatch class to invoke COM methods through
* IDispatch.
*/
Object B = A.GetB();
Variant V = Dispatch.call(B,"GetData");
data = V.getInt();
com.ms.wfc.util.Debug.println(new Integer(data).toString());
V = Dispatch.call(B,"SetData", new Integer(10));
V = Dispatch.call(B,"GetData");
data = V.getInt();
com.ms.wfc.util.Debug.println(new Integer(data).toString());
} catch(ClassCastException e) {
e.printStackTrace();
System.out.println(e.toString());
System.out.println(e.getMessage());
}
}
}
Keywords: kbbug kbjava KB202600