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
