Excel自动化与Haskell提供了一个SEG故障

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (30)

我可以用下面的脚本启动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]
我试着调试,但没有任何信息。

我发现了分割错误:

*Main> coInitialize
*Main> pExl <- createObjExl
*Main> release pExl
0

现在,如果我点击“pexe”,我就有了一个引用。那不是应该设置为空的吗?

*Main> pExl
<interface pointer = 0x020844cc>

*Main> coUnInitialize
*Main> :q
leaving Ghci
Segmentation Fault/access violation ...
提问于
用户回答回答于

你可能会调用给workSheets方法从静态函数中获取。试着把它搬出去。

或者,是否尝试显式声明“工作表”的数据类型?

WorkSheets :: Int -> Int或者(不管是什么类型的)。

扫码关注云+社区