[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
"scheme_setjmp" under Windows DLL?
Hi,
I'm trying to isolate the MzScheme problem about "scheme_setjmp"
instruction which seems not to save correctly the return address if it is
invoked in a windows DLL.
I created a simple DLL library with the following two files (VisualC
6.0/New/DLL/Empty Dll):
*** DLL.h ***
--------------------------------------------
#ifndef _DLL_H__
#define _DLL_H__
#ifdef DLL_EXPORTS
#define MYEXPORT __declspec(dllexport)
#else
#define MYEXPORT __declspec(dllimport)
#endif
MYEXPORT void init();
MYEXPORT void eval ();
#endif //_DLL_H__
--------------------------------------------
*** DLL.cpp ***
--------------------------------------------
#include <scheme.h>
#define DLL_EXPORTS
#include "dll.h"
static Scheme_Env* mySchemeEnv;
MYEXPORT void init(){
mySchemeEnv=scheme_basic_env();
}
MYEXPORT void eval (){
if (scheme_setjmp(scheme_error_buf)){
return;//ERROR!!! HERE IS THE PROBLEM
}else {
Scheme_Object
*v=scheme_eval_string("(i-want-error)", mySchemeEnv);
}
}
--------------------------------------------
and a simple application (Visual C6.0/New/Console application - Make it
dependant on the previous DLL):
*** MAIN.CPP ***
--------------------------------------------
#include "dll.h"
int main()
{
init();
eval();
return 0;
}
--------------------------------------------
When I run it it crashes (on DLL "eval" return instruction).
The debugger warns me about a strange stack condition with the following
message:
--------------------------------------------
Debug Error!
Program F:\dll\main.exe
Module:
File i386\chkesp.c
Line: 42
The value of ESP was not properly saved across a function call.
This is usually a result of calling a function
declared with one calling convention with a function pointer declared
with a different calling convention
-----------------------------------
Can someone help me?
*************************************
Giorgio Scorzelli
scr.giorgio@cogesic.it
http://dia.uniroma3.it/~scorzell
*************************************