<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>