使用Haskell进行Excel自动化会导致段错误
我可以用下面的脚本启动Excel。 但是在ghci(7.4.1)中,我运行它时出现了分段错误。
我不知道现在从哪里search。 我没有这个错误,如果我删除线
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]
编辑冈萨雷斯的build议,我试着debugging,但没有信息出现。 我用ghci手工编码,看起来有罪的派对就是释放function。
当我用ghciinput时,我得到了分段错误:
*Main> coInitialize *Main> pExl <- createObjExl *Main> release pExl 0
现在,如果我打“pExl”,我有一个参考。 不应该被设置为空?
*Main> pExl <interface pointer = 0x020844cc> *Main> coUnInitialize *Main> :q leaving Ghci Segmentation Fault/access violation ...
您可能正在从一个静态函数中调用workSheets
方法。 尝试将其移出。
或者,你是否尝试明确声明“工作表”的数据types
WorkSheets :: Int -> Int
或(无论types是什么)。