The information in this article applies to:
When trying to use a Microsoft® Visual C++®-generated ActiveX Control from Java, you will see the following error when trying to run the Java application:
Error:<0x8000ffff> Catastrophic failure Press any key to continue...
When trying to use a Microsoft® ActiveX® Control as an automation server, you need to override the method IsInvokeAllowed. For more information on why this method has to be overridden, please see the REFERENCES section below.
To fix the problem, override IsInvokeAllowed in your ActiveX Control as follows:
BOOL CMyOleControl::IsInvokeAllowed (DISPID) { // You can check to see if COleControl::m_bInitialized is FALSE // in your automation functions to limit access. return TRUE; }
For the example case given below, you will override this method in the Circ3ctl.cpp file and declare this virtual function in the Cir3ctl.h file. Also make sure you rebuild and reregister the control before using it from Java.
This behavior is by design.
import com.ms.com.*; import circ3.*; public class circle { public static void main(String args[]) { circle main = new circle(); main.test(); } } public void test() { _DCirc3 c = null; c = (_DCirc3) new Circ3(); c.AboutBox(); } }
For more information on how to use an ActiveX Control as an Automation Server, please see the following article in the Microsoft Knowledge Base:
Q146120 HOWTO: Use an OLE Control as an Automation Server
For more information on how to use the new Jvc.exe with Visual J++, please see the following article in the Microsoft Knowledge Base:
Q183712: HOWTO: Installation Instructions for the Microsoft SDK for Java.
Catastrophic error activex control