Подтвердить что ты не робот

Автоматизация Excel с помощью Haskell дает ошибку seg

Я могу запустить Excel со следующим script. Но в 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, и казалось, что виновной стороной была функция выпуска.

Когда я ввел их в 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 ...
4b9b3361

Ответ 1

Вы можете вызвать метод workSheets из статической функции. Попробуйте переместить его.

Или вы пытались явно объявить тип данных "Рабочие листы"

WorkSheets :: Int -> Int или (какой бы тип не был).