<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">You are passing wchar_t* and function
expects char*.<br>
<br>
<br>
On 03/15/2014 12:23 AM, Miro Karpis wrote:<br>
</div>
<blockquote
cite="mid:CAJnnbxE-_OkU03v+CJ4x5=_ZdNNQxwtuNZqRuhaEiXE9Uai8nQ@mail.gmail.com"
type="cite">
<div dir="ltr"><font color="#444444">here comes the c definition:</font>
<div><font color="#444444"><br>
</font>
<div>
<pre style="font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12px;margin-top:0px;margin-bottom:0px;line-height:18px"><div class="" id="LC74" style="padding-left:10px"><font color="#444444"><span class="" style="font-weight:bold">int</span> <span style="font-size:12.222222328186035px">setmodulestring</span><span class="" style="">(</span><span class="" style="font-weight:bold">char</span><span class="" style="font-weight:bold">*</span> <span class="" style="">parameter</span><span class="" style="">, </span><span class="" style="font-weight:bold">int</span> <span class="">parameterLength</span><span class="">, </span><span class="" style="font-weight:bold">char</span><span class="" style="font-weight:bold">*</span> <span class="">value</span><span class="">, </span><span class="" style="font-weight:bold">int</span> <span class="">valueLength</span><span class="">, </span><span class="" style="font-weight:bold">int</span> <span class="">setVarInArray</span>
<span class="">);</span></font></div>
<div class="" id="LC74" style="padding-left:10px"><span class=""><font color="#444444">
</font></span></div><div class="" id="LC74" style="padding-left:10px"><span class=""><font color="#444444">
</font></span></div>
<div class="" id="LC74" style="padding-left:10px"><font color="#444444">In ghci the main and setmodulestring functions works fine</font></div></pre>
</div>
</div>
</div>
<div class="gmail_extra"><br>
<br>
<div class="gmail_quote">
On Sat, Mar 15, 2014 at 12:14 AM, Branimir Maksimovic <span
dir="ltr"><<a moz-do-not-send="true"
href="mailto:branimir.maksimovic@gmail.com"
target="_blank">branimir.maksimovic@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<div class="">
<div>On 03/14/2014 11:24 PM, Miroslav Karpis wrote:<br>
</div>
<blockquote type="cite">
<div><span
style="font-family:Calibri;font-size:medium">Hi,
please can you help me with following?</span>
<div style="font-family:Calibri;font-size:medium"><br>
</div>
<div style="font-family:Calibri;font-size:medium">I
have a call to an external dll (via ffi) which if
executed from ghci works fine. </div>
<div style="font-family:Calibri;font-size:medium">If
I compile my code with 'ghc -o fm Mycode.hs -L.
-lextdll' and run it I get 'Segmentation
fault/access violation in generated code'.</div>
<div style="font-family:Calibri;font-size:medium">
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>
<div>main = do</div>
<div><span style="white-space:pre-wrap"> </span>let
param = "FilePath"</div>
<div><span style="white-space:pre-wrap"> </span>let
value = "C:/dev/misc/haskell/services/FM"</div>
<div><span style="white-space:pre-wrap"> </span>result
<- liftIO $ FM.setmodulestring param value</div>
<div><span style="white-space:pre-wrap"> </span>return
"done"</div>
</div>
<div><br>
</div>
<div>
<div
style="font-family:Calibri,sans-serif;font-size:14px">setmodulestring
:: String -> String -> IO CInt</div>
<div
style="font-family:Calibri,sans-serif;font-size:14px">setmodulestring
param value = do</div>
<div
style="font-family:Calibri,sans-serif;font-size:14px"><span
style="white-space:pre-wrap"> </span>let cParamLength
= fromIntegral $ length param ::CInt</div>
<div
style="font-family:Calibri,sans-serif;font-size:14px"><span
style="white-space:pre-wrap"> </span>
cValueLength = fromIntegral $ length value
::CInt</div>
<div
style="font-family:Calibri,sans-serif;font-size:14px"><span
style="white-space:pre-wrap"> </span>
setVarInArray = (-1)::CInt</div>
<div
style="font-family:Calibri,sans-serif;font-size:14px"><span
style="white-space:pre-wrap"> </span>alloca
$ \cParam -> do</div>
<div
style="font-family:Calibri,sans-serif;font-size:14px"><span
style="white-space:pre-wrap"> </span>alloca
$ \cValue -> do</div>
<div
style="font-family:Calibri,sans-serif;font-size:14px"><span
style="white-space:pre-wrap"> </span>result
<- c_setmodulestring cParam cParamLength
cValue cValueLength setVarInArray</div>
<div
style="font-family:Calibri,sans-serif;font-size:14px"><span
style="white-space:pre-wrap"> </span>return
result</div>
</div>
</div>
<div style="font-family:Calibri;font-size:medium"><br>
</div>
</div>
</blockquote>
</div>
This does not seems correct (or incomplete).
<div class=""><br>
<br>
<blockquote type="cite">
<div>
<div style="font-family:Calibri;font-size:medium">If
I try also with following, the behaviour is the
same:</div>
<div style="font-family:Calibri;font-size:medium"><br>
</div>
<div style="font-family:Calibri;font-size:medium">
<div>setmodulestring2 :: String -> String ->
IO CInt</div>
<div>setmodulestring2 param value = do</div>
<div><span style="white-space:pre-wrap"> </span>cParam
<- newCWString param</div>
<div><span style="white-space:pre-wrap"> </span>cValue
<- newCWString value</div>
<div><span style="white-space:pre-wrap"> </span>let
cParamLength = fromIntegral $ length param
::CInt</div>
<div><span style="white-space:pre-wrap"> </span>
cValueLength = fromIntegral $ length value
::CInt</div>
<div><span style="white-space:pre-wrap"> </span>
setVarInArray = (-1)::CInt </div>
<div><span style="white-space:pre-wrap"> </span>result
<- c_setmodulestring cParam cParamLength
cValue cValueLength setVarInArray</div>
<div><span style="white-space:pre-wrap"> </span>free
cParam</div>
<div><span style="white-space:pre-wrap"> </span>free
cValue</div>
<div><span style="white-space:pre-wrap"> </span>return
res</div>
</div>
<div style="font-family:Calibri;font-size:medium"><br>
</div>
</div>
</blockquote>
</div>
This one may be correct but without, seeing C code (where
it probably <br>
segfaults) I cannot say anything further.<br>
exact ffi declaration of c_setmodulestring would be
usefull, too,<br>
to compare with C function.<br>
<br>
<br>
</div>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a moz-do-not-send="true"
href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a moz-do-not-send="true"
href="http://www.haskell.org/mailman/listinfo/haskell-cafe"
target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<br>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
</body>
</html>