次のスクリプトでExcelを起動できます。しかし、ghci(7.4.1)では、実行時にセグメンテーション違反が発生します。
今からどこで検索すればいいのかわかりません。行を削除してもこのエラーは発生しません
workSheets <- workBook # propertyGet_0 "Worksheets"
これがコードです。何か忘れたのかもしれません。ここでcom.hsのソースコードを読みましたが、何の手がかりもありません。
import System.Win32.Com
import System.Win32.Com.Automation
--
-- createObjectExcel
-- coming from Automation.hs and com.hs
--
iidIDispatch_unsafe = mkIID "{00020400-0000-0000-C000-000000000046}"
createObjExl :: IO (IDispatch ())
createObjExl = do
clsidExcel <- clsidFromProgID "Excel.Application"
pExl <- coCreateInstance clsidExcel Nothing LocalProcess iidIDispatch_unsafe
return pExl
fichierTest2 = "E:/Programmation/haskell/Com/qos1.xls"
main = coRun $ do
pExl <- createObjExl
workBooks <- pExl # propertyGet_0 "Workbooks"
workBook <- workBooks # propertyGet_1 "Open" fichierTest2
workSheets <- workBook # propertyGet_0 "Worksheets"
workBooks # method_1_0 "Close" (0::Int)
pExl # method_0_0 "Quit"
mapM release [workSheets,workBook, workBooks, pExl]
ゴンザレスのアドバイスで編集してデバッグを試みましたが、情報が得られませんでした。ghciで手作業でコードを試してみたところ、リリース機能が有罪のようでした。
これらをghciに入力すると、セグメンテーション違反が発生しました。
*Main> coInitialize
*Main> pExl <- createObjExl
*Main> release pExl
0
「pExl」を押すと、参照があります。それをNullに設定するべきではありませんか?
*Main> pExl
<interface pointer = 0x020844cc>
*Main> coUnInitialize
*Main> :q
leaving Ghci
Segmentation Fault/access violation ...