Stack alignmennt in call from C++ to FPC Hi,
I have recently ported a Delphi application to Lazarus/FPC (Win32/x86). This application makes use of a DLL implemented in MS Visual C++ 2010. The calls from FPC code to C++ code work fine. However this DLL also has a callback system for notifications. When the DLL calls a FPC callback function a crash occurs inside the DLL with a 'Datatype misalignment' exception (1). Some references (eg (2)) claim that MSVC aligns the stack at 4-byte boundaries while GCC aligns at 16-byte boundaries. I have found no confirmation on those claims. With GCC I could use __attribute__((force_align_arg_pointer)) in the callback declaration. Or even -mstackrealign. However I can't find a similar option with FPC. Any idea? Thanks for any help. Here some code excerpts: { FPC } type TMyCallback = procedure(s : PChar); stdcall; ... procedure RegisterCallBack(callback: TMyCallback); stdcall; external 'MyDll.dll'; ... procedure Callback(s : PChar); stdcall; begin { use s } end; ... RegisterCallBack(Callback); ... // C++ typedef void (__stdcall *Callback_t)(const char* s); extern "C" { __declspec(dllexport) void RegisterCallback(Callback_t p); } ... static Callback_t callback = 0; void RegisterCallback(Callback_t p) { callback(p); } ... // at some point the callback is called; if (callback) callback("hello world"); // <== crashes here -- Josue A. Gomes josuegomes.com (1) Actual error: Unhandled exception at 0x00411990 in Project1.exe: 0x80000002: Datatype misalignment. (2) http://www.gamedev.net/topic/482230-mingw-dll-used-in-mingw-and-vc-app-memory-alignment/ _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal