Ik kan Excel starten met het volgende script. Maar in ghci (7.4.1) heb ik een segmentatiefout wanneer ik het run.
Ik weet nu niet waar ik moet zoeken. Ik heb deze fout niet als ik de regel verwijder
workSheets <- workBook # propertyGet_0 "Worksheets"
Hier is de code. Misschien ben ik iets vergeten. Ik heb de broncode van com.hs hiergelezen, maar het geeft me geen idee.
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]
Bewerkenop advies van Gonzalez Ik heb geprobeerd te debuggen, maar er kwam geen informatie naar voren. Ik probeerde de code met de hand in ghci, en het leek erop dat de schuldige partij de vrijgavefunctie was.
Toen ik deze invoerde in ghci, kreeg ik de segmentatiefout:
*Main> coInitialize
*Main> pExl <- createObjExl
*Main> release pExl
0
Als ik nu op “pExl” klik, heb ik een referentie. Moet dat niet op Null staan?
*Main> pExl
<interface pointer = 0x020844cc>
*Main> coUnInitialize
*Main> :q
leaving Ghci
Segmentation Fault/access violation ...
Antwoord 1, autoriteit 100%
Misschien roept u de methode workSheets
aan vanuit een statische functie. Probeer het te verplaatsen.
Of heb je geprobeerd het gegevenstype ‘Werkbladen’ expliciet aan te geven
WorkSheets :: Int -> Int
of (wat voor type het ook is).