I tried compiling the following code using the MinGW variant v4.1.2, and things work with no special linker options:
(define mbox (c-lambda ((pointer void) char-string char-string int) int "MessageBoxA"))
(mbox #f "Message body here" "Caption here" 0)
The steps are:
% gsc test.scm % gsi test
Had you needed to link to special libraries (such as user32 and gdi32) you would do:
% gsc -ld-options "-luser32 -lgdi32" test.scm
Marc
On 25-Dec-07, at 5:19 AM, Nick wrote:
Hi!
I want to call a function ([1]) from a dynamic library under Windows. At first I tried to call MessageBox from "user32.dll" and failed to do it under gambit. When I tried DrScheme and it worked fine. Here is the source: (module dr-scheme-ffi mzscheme
(require (lib "foreign.ss")) (unsafe!) (define user32.dll (ffi-lib #f))
(define mbox (get-ffi-obj "MessageBoxA" user32.dll (_fun _pointer _string _string _int -> _int)))
(mbox #f "Message body here" "Caption here" 0) ) I've searched through the whole gambit-list, but no one seems to discuss the theme. What is the correct way to call an exported function in a dll from gambit scheme? (Let them be at first MessageBoxA and user32.dll).
Thanks in advance, Nick.
// BOOL ReadProcessMemory( // HANDLE hProcess, //[in] Handle to the process whose memory is being read. // LPCVOID lpBaseAddress, //[in] Pointer to the base address in the specified process to be read. // LPVOID lpBuffer, //[out] Pointer to a buffer that receives the contents from the address space of the specified process. // DWORD nSize, //[in] Specifies the requested number of bytes to read from the specified process. // LPDWORD lpNumberOfBytesRead //[out] Pointer to the number of bytes transferred into the specified buffer. // );
Gambit-list mailing list Gambit-list@iro.umontreal.ca https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list