我可以使用以下脚本启动 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]
使用 Gonzalez 的建议进行编辑我尝试调试,但没有出现任何信息。我在ghci中亲手试了下代码,看来罪魁祸首是release函数。
当我在 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 ...