1. 程式人生 > >com4j 呼叫控制元件後,解決無法釋放控制元件資源的方法

com4j 呼叫控制元件後,解決無法釋放控制元件資源的方法

com4j的使用方法參見 http://blog.csdn.net/nieou/article/details/9952031

這裡討論下com4j釋放控制元件資源的問題。

com4j在Com4jObject介面中提供了一個dispose方法,用於釋放控制元件資源。但是實際使用中,呼叫dispose方法並沒有能夠成功釋放資源。

開始分析com4j的dll原始碼,在Java_com4j_Native_createInstance函式中發現控制元件介面建立部分似乎有些異常:

        hr = CoCreateInstance(clsid,NULL,clsctx,__uuidof(IUnknown),(void**)&pUnk);
        if(FAILED(hr)) {
            error(env,__FILE__,__LINE__,hr,"CoCreateInstance failed");
            return 0;
        }
        hr = OleRun(pUnk);
        if(FAILED(hr)) {
            error(env,__FILE__,__LINE__,hr,"OleRun failed");
            return 0;
        }


        hr = pUnk->QueryInterface(iid,&p);
        if(FAILED(hr)) {
            error(env,__FILE__,__LINE__,hr,"QueryInterface failed");
            return 0;
        }

紅色部分程式碼不是通常建立介面會用到的,這裡我也不理解開發者的用意;不過在註釋該部分程式碼後,呼叫dispose方法就可以正確釋放資源了。