1. my vendor interface is defined in an h & c file:
_EXTERN S16BIT _DECL aceSetIrqConditions(S16BIT DevNum, U16BIT bEnable,
U32BIT dwIrqMask,void(_DECL *funcExternalIsr)(S16BIT DevNum, U32BIT
dwIrqStatus))
void _DECL Callback(S16BIT DevNum, U32BIT dwIrqStatus);
/* Configure user callback ISR and enable EOM interrupts */
aceSetIrqConditions(DevNum, TRUE, ACE_IMR1_BC_MSG_EOM, Callback);
void _DECL Callback(S16BIT DevNum, U32BIT dwIrqStatus)
{
/* this is what I would write, I would like to get here with C#
}
2. I am trying to use the vendor interface for the above
aceSetIrqConditions() to call an interrup routine I write (eomInterrupt).
This is my C# effort, it compiles, but when I try to execute this, I get an
Error, see below:
// EOM Interrupt declaration
public delegate void Callback(short DevNum, uint dwIrqStatus);
[DllImport("C:\\acs\\bin\\Release\\emace_32.dll")]
public extern static short aceSetIrqConditions(short DevNum, ushort bEnable,
uint dwIrqMask, Callback cbm);
Callback cbm = new Callback(eomInterrupt);
aceSetIrqConditions(devNum, 1, ACS1553.ACE_IMR1_BC_MSG_EOM, cbm);
public void eomInterrupt(short DevNum, uint dwIrqStatus)
{
/* *** never gets to statement below! *** */
if((dwIrqStatus & ACS1553.ACE_IMR1_BC_MSG_EOM) != 0)
{
irqCount++;
}
}
The error is:
Debug Error!
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.
The program runs fine, except when I added above. What am I doing wrong???
Thanks,
--
Evelyne