1. 程式人生 > >java呼叫ocx出現災難性故障

java呼叫ocx出現災難性故障

Exception in thread "main" com.jacob.com.ComFailException: A COM exception has been encountered:
At Invoke of: isLogin
Description: 災難性故障

 at com.jacob.com.Dispatch.invokev(Native Method)
 at com.jacob.com.Dispatch.invokev(Dispatch.java:804)
 at com.jacob.com.Dispatch.callN(Dispatch.java:440)
 at com.jacob.com.Dispatch.call(Dispatch.java:510)
 at com.vflow.sms.InitOcxFunctions.isLogin(InitOcxFunctions.java:36)
 at com.vflow.test.TestOcx.main(TestOcx.java:14)

 
 經過在網上搜索,最終成功解決(測試環境,jdk1.6,jacob1.9),方法如下:

在OCX控制元件中,重寫COleControl.IsInvokeAllowed (DISPID)方法,即在控制元件的CMyNameCtrl中增加一個方法

BOOL CMyNameCtrl::IsInvokeAllowed (DISPID)

{

      return TRUE;

}

用這個方法的理由是:

這個錯誤是由ActiveX結構設計造成的。

在Ole4.0版本之前,外部程式是可以直接呼叫OCX中方法的。Ole4.0之後,每次呼叫控制元件中的方法,系統會自動檢查是否允許呼叫,即執行COleControl.IsInvokeAllowed (DISPID)

該方法檢查控制元件是否正確的初始化或者是否通過持久儲存介面正確載入,如果兩個條件有一個滿足,即返回TRUE,否則返回FALSE。

當控制元件在MFC中使用時,很多細節,如初始化,都被過濾了,這樣,大多數使用者都不會遇到這個問題。但是,當我們從C、C++的dll中呼叫控制元件時,不滿足上述條件,該方法返回FALSE,這時候再呼叫任何控制元件方法,都會出現上述異常。

相關推薦

java呼叫ocx出現災難性故障

Exception in thread "main" com.jacob.com.ComFailException: A COM exception has been encountered: At Invoke of: isLogin Description: 災難性故障

Java呼叫webservice出現System.NullReferenceException: 未將物件引用設定到物件的例項。

今天在編寫一個呼叫公網的webservice程式使用的是 http://www.36wu.com/Service/Details/2?cid=7網站上的快遞查詢服務,採用wsimport生成java程式碼。 自己編寫客戶端程式碼如下: ExpressS

java呼叫ocx方法

一、註冊.ocx控制元件,在命令視窗執行:regsvr32.exe  XXX.ocx, 二、取得控制元件的classid,開始-->執行-->輸:regedit,開啟登錄檔---->在登錄檔的工具欄的編輯中找到搜尋按鈕,輸入XXX.ocx的名字XXX查

Java呼叫OCX控制元件

通過Java呼叫OCX控制元件有幾種方法,JNI、JACOB、Jawin等 1.JNI 最直接的方式,也是最麻煩的方式,需要自己完成所有的工作,不推薦。 2.Jawin 嘗試了一下,效果不錯,但相對來說,其程式設計風格更貼近Windows,離Java有點遠 。 3.Jacob 使用Jacob非常方便

Java呼叫python,出現“無法解析的編譯問題,PythonInterpreter無法解析為型別”

在Java專案檔案中,想要呼叫python處理的一些結果,可以使用jython jar包,可以在http://www.jython.org/downloads.html下載最新的jar包來使用,追求穩定的話可以選擇較低一些的版本。 下載後放入專案工程目錄中並配

Java 呼叫 FFMPEG 命令時用 url 作為輸入源,Linux 下出現 “no such file or directory” 問題的解決

        Windows 下執行 ffmpeg 命令,         D:/tools/ffmpeg/bin>ffmpeg.exe -i "某視訊檔案下載URL" -f flv D:/1.flv        可以成功直接將下載連結輸入源轉為 1.flv。

dubbo呼叫服務出現如下異常Serialized class com.taotao.manager.pojo.TaoResult must implement java.io.Serializabl

20880-thread-4] [com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec]-[WARN]  [DUBBO] Fail to en

PXE+Kickstart無人值守安裝CentOS 7出現DHCP故障解決報告

部署dhcp服務器 部署DHCP服務器 在安裝dhcp.x86_64 後,用命令systemctlstatus dhcpd 命令查看dhcp服務運行狀態發現failed。報錯信息為如下圖:Not configured to listen on any interfac

Android Studio中的Java控制臺中出現亂碼問題?

.com java 亂碼 idt gradle http 今天 highlight class 今天在用Android studio 中敲代碼時發現控制臺出不了漢字,一打漢字全是亂碼的。在此特供解決方案。 在Java的工程目錄build.gradle下添加如下代碼: 1.

Java結合--ArrayList出現同步問題的原因

存在 name 復制代碼 gif sys 線程 返回 java next() 1 fail-fast簡介 fail-fast 機制是java集合(Collection)中的一種錯誤機制。當多個線程對同一個集合的內容進行操作時,就可能會產生fail-fast事件。例如:當某一

java中經常出現的exception

java exception // 1.空指針異常// String str = null;// System.out.println(str.length()); // 2.數組下標越界// int arr[]= {1,2};// Syst

Eclipse 軟件 Java 解決:出現的editor does not contain a main type錯誤框 問題

strong eight res cli use padding out auto borde Eclipse 軟件 解決:出現的 editor does not contain a main type 錯誤框 問題 當你運行 Java文件是,如果彈出了下面的 錯誤框:

Java-編譯後出現$1.class、$2.class等多個class文件

etc 多個 cte 結果 rda this bject row temp 部署代碼的時候,由於自身技術不精和疏忽,導致查詢數據沒有正常顯示, 排除法最後只能是放置部署文件時未包括多出來的$class文件。放上去之後果然好使了,才記錄下這個問題。。。 這是因為在我們寫的類中

運用java 呼叫tensorflow中的inception v3模型

首先使用maven新增依賴項: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3

JBoss呼叫Webservice出現org.jboss.ws.core.jaxws.spi.ProviderImple not found錯誤

一、環境介紹 Linux CentOS 6.5 64bit,JDK1.7 ,JBoss 4.3.0-GA,專案工程引用cxf框架,版本號為2.5.0 二、報錯資訊 專案中自身釋出的Webservice沒有問題,外部可以正常呼叫,但專案作為客戶端呼叫其他系統釋出的Webservic

Eclipse直接完成JAVA呼叫C/C++ (Eclipse上使用CDT結合MinGW)

    原文地址:http://www.blogjava.net/orangewhy/archive/2007/05/24/119645.html     網上都有很多在windows平臺下JAVA呼叫C/C++方法的介紹說明。但是,在此過程中

Java呼叫阿里雲簡訊通道服務

這裡我們使用SpringBoot 來呼叫阿里通訊的服務。 (用哪個框架無所謂,即便是統Java工程也能實現,但需要連網) 阿里通訊,雙11.收到簡訊,日傳送達6億條。保障力度非常高。 使用的步驟: 第一步:需要開通賬戶 第二步:閱讀介面文件 祕鑰管理 簡訊簽名 簡訊模板

02.Java使用鍵盤輸入 && Java呼叫函式(方法)

 一、Java使用鍵盤輸入 import java.util.Scanner; Scanner sc = new Scanner(System.in); int enterNumber = sc.nextInt(); 如果輸入字串: String str = sc.n

Java呼叫R環境配置問題:Cannot find JRI native library!

Cannot find JRI native library! Please make sure that the JRI native library is in 

瑞波JAVA呼叫(離線簽名)

具體注意點請參考:https://blog.csdn.net/liu1765686161/article/details/82492937 1.需要安裝兩個jar包 https://github.com/ripple-unmaintained/ripple-lib-java 中 ri