1、在c#工程檔案中,使用c++等其他語言編譯的ocx元件時,若為winform工程則不會報錯,
若使用wpf等其他型別的工程,在呼叫元件內的方法時,會報錯:
災難性故障
未處理 system.runtime.interopservices.comexception
message="災難性故障 (異常來自 hresult:0x8000ffff (e_unexpected))"
source="mscorlib"
errorcode=-2147418113
解決辦法:
aximp路徑(vs2012)c:\program files (x86)\microsoft sdks\windows\v8.0a\bin\netfx 4.0 tools
使用aximp(activex控制項匯入程式),將 activex 控制項的 com 型別庫中的型別定義轉換為 windows 窗體控制項。
詳見aximp.exe 一次轉換整個 activex 控制項型別庫,並產生一組程式集,這些程式集包含在原始型別庫中定義的型別的公共語言執行時元資料和控制項實現。
生成的檔案按照下面的模式命名:
com 型別的公共語言執行時**:progid.dll
activex 控制項的 windows 窗體**(其中 ax 表示 activex):axprogid.dll
方法:在cmd命令提示符視窗,輸入如下命令:
aximp e:\pis2004.ocx
將生成的pis2004lib.dll和axpis2004lib.dll引用到工程檔案中。
2、在c#的工具箱內,新增com元件pis2004.ocx,工具箱內顯示不出來,無法將其作為控制項拖拽到窗體上。
此時需要通過activex 控制項的 windows 窗體**axpis2004lib.dll,在後台**中例項化乙個控制項,並新增到窗體中。
事先需要新增引用:system.windows.forms,windowsformsintegration。
例:// 建立 host 物件,用於承載axtivex控制項
windowsformshost host = new windowsformshost();
//例項化axtivex控制項
axpis2004lib.axpis2004 objaxpis2004 = new axpis2004lib.axpis2004();
//開始初始化ocx物件
objaxpis2004.begininit();
objaxpis2004.height = 200;
objaxpis2004.width = 200;
// 結束初始化
objaxpis2004.endinit();
//將控制項新增到host中
host.child = objaxpis2004;
// 將控制項顯示在頁面上(其中skp_pis2004為窗體上乙個用於放置控制項的容器stackpanel)
this.skp_pis2004.children.add(host);
進行完上述步驟之後,ocx內的方法就可以正常使用了。
在C 程式中使用ocx的方法
在做乙個wpf的專案時 vs2008,c 需要引用乙個使用c 編譯的ocx元件,但是執行的時候經常報錯,無法使用其中提供的介面和方法。上網查了一下解決辦法,方法很多,但是很多都沒有奏效。最終找到了乙個比較有效的方法,下面就是在我的程式中能夠成功使用的例子,分享一下。雖然已經是去年的了 1 在c 工程...
在C 方法中使用using的意義
在c 函式方法體中使用using,表明乙個類只能在當前方法體中存在,出了方法體就會呼叫該函式的析構函式。但是該類必須實現了idisposable介面,並且除非該類的析構函式定義為虛函式且子類重寫了,否則都只會呼叫該類的析構函式,並不會像c 釋放全部記憶體,依然還是要clr去管理。與c 基類定義為虛函...
在SlickEdit中使用微軟的C 編譯器
1 new project customize.new.在new package name中輸入新工程型別的名字,在copy setting from中選擇microsoft visual studio 2003 2005 2008 2 在project properties中的compile li...