Exporting a String

Sven Eric Panitz sep@softwareag.com
Fri, 28 Sep 2001 08:20:08 +0200


I am no expert in these things, but
as a matter of fact I just did some quite similar and found
the help in the mailing list archive. (at least I did not find
a cookbook for this in the documentation)

My Haskell module:
==================

module Mini where
import CString

foreign export stdcall cAppend :: CString -> CString -> IO CString

cAppend :: CString -> CString -> IO CString
cAppend cxs cys
 = do
    xs <- peekCString cxs
    ys <- peekCString cys
    erg <- return (xs++ys)
    newCString erg


And my C program Main.c calling this function:
==============================================

#include <stdio.h>
#include "Mini_stub.h"
#include "RtsAPI.h" 

extern void __stginit_Mini ( void ); 

int main(void)
{
   char* bogusFlags[1] = { "\0" }; 
   char* test;   

   //starting up Haskell runtime
   startupHaskell(0, bogusFlags, __stginit_Mini);

   //calling Haskell function
   test=cAppend("the world"," is my oyster"); 

   //printing its result
   printf("%s\n", test);

   //say bye bye to Haskell
   shutdownHaskell();

   return 0;
}


and my way to build this thing:
===============================
ghc -fglasgow-exts -package text -c Mini.hs
gcc -I. -I'e:/Program Files/ghc/ghc-5.02/include' -I'E:\Program Files\ghc\ghc-5.02\include\mingw' -c Main.c
ghc -fglasgow-exts -no-hs-main -package text -static Main.o Mini.o Mini_stub.o -o Test.exe




Please some expert correct me, if this is not the right way to
do this.

Sven Eric


-- 
______________________________________________________________
Sven Eric Panitz         Uhlandstr. 12       D-64297 Darmstadt
Software AG           sep@softwareag.com     (+49)6151-92-1426 
---  when I cannot sing my heart, I can only speak my mind ---