Can't co-create object / Can't find moniker | Jacob

后端 未结 1 876
忘了有多久
忘了有多久 2021-01-20 18:26

When creating an ActiveXComponent using JACOB I get the following error.

com.jacob.com.ComFailException: Can\'t co-create object
    at com.jaco         


        
相关标签:
1条回答
  • 2021-01-20 19:15

    I tried all solution and finally succeeded to crack the code related to JACOB. Create your code as per below sample code.

    public static void main(String[] args) {
            String libFile = System.getProperty("os.arch").equals("amd64") ? "jacob-1.17-x64.dll" :"jacob-1.17-x86.dll";
            try{
                /**
                 * Reading jacob.dll file
                 */
                InputStream inputStream = certificatemain.class.getResourceAsStream(libFile);
                /**
                 *  Step 1: Create temporary file under <%user.home%>\AppData\Local\Temp\jacob.dll 
                 *  Step 2: Write contents of `inputStream` to that temporary file.
                 */
                File temporaryDll = File.createTempFile("jacob", ".dll");
                FileOutputStream outputStream = new FileOutputStream(temporaryDll);
                byte[] array = new byte[8192];
                for (int i = inputStream.read(array); i != -1; i = inputStream.read(array)){
                    outputStream.write(array, 0, i);
                }
                outputStream.close();
                /* Temporary file will be removed after terminating-closing-ending the application-program */
                System.setProperty(LibraryLoader.JACOB_DLL_PATH, temporaryDll.getAbsolutePath());
                LibraryLoader.loadJacobLibrary();
    
                ActiveXComponent comp=new ActiveXComponent("Com.Calculation");        
                System.out.println("The Library been loaded, and an activeX component been created");
    
                int arg1=100;
                int arg2=50;
                //using the functions from the library:        
                int summation=Dispatch.call(comp, "sum",arg1,arg2).toInt();
                System.out.println("Summation= "+ summation);
            }catch(Exception e){
                e.printStackTrace();
            }
    }
    

    Now let me tell you how to register your DLL. I also followed same article you mentioned but not working when you are dealing with applet.

    Go to x86 framework using command line.

    C:\Windows\Microsoft.NET\Framework\v2.0.50727

    to register do same as

    regasm.exe path_to_your_dll.dll /codebase

    Don't pass any other flag except /codebase. You are done with it... Still you find any problem let me know...

    0 讨论(0)
提交回复
热议问题