i have following code , once i run my application i get this error
anyone know how i fix this error?
ERROR:
A call to PInvoke function 'testcamera!EDSDKLib.EDSDK::EdsDownloadEvfImage' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature
IntPtr cameraDev;
bool LVrunning = false;
uint err = EDSDK.EDS_ERR_OK;
uint device = 0;
IntPtr MemStreamRef = new IntPtr(0);
IntPtr EvfImageRef = new IntPtr(0);
PictureBox pbLV;
public LiveView(IntPtr c, PictureBox p)
{
cameraDev = c;
pbLV = p;
}
internal void StartLiveView()
{
//LVrunning = true;
//int i = 0;
// Get the output device for the live view image
err = EDSDK.EdsGetPropertyData(cameraDev, EDSDK.PropID_Evf_OutputDevice, 0, out device);
Debug.WriteLineIf(err != EDSDK.EDS_ERR_OK, String.Format("Get Property Data failed: {0:X}", err));
Debug.WriteLineIf(err == EDSDK.EDS_ERR_OK, String.Format("Liveview output is: {0:x}", device));
Thread.Sleep(1000);
// Set the computer as live view destination
if (err == EDSDK.EDS_ERR_OK)
{
err = EDSDK.EdsSetPropertyData(cameraDev, EDSDK.PropID_Evf_OutputDevice, 0,
Marshal.SizeOf(EDSDK.EvfOutputDevice_PC), EDSDK.EvfOutputDevice_PC);
Debug.WriteLine(String.Format("Liveview output to computer: {0:X}", err));
}
// Create a memory stream for the picture
if (err == EDSDK.EDS_ERR_OK)
{
err = EDSDK.EdsCreateMemoryStream(0, out MemStreamRef);
Debug.WriteLine(String.Format("Create Memory Stream: {0:X}", err));
}
// Get a reference to a EvfImage
if (err == EDSDK.EDS_ERR_OK)
{
**//i get error here**
**err = EDSDK.EdsCreateEvfImageRef(MemStreamRef, out EvfImageRef);**
Debug.WriteLine(String.Format("Create Evf Imaage Ref: {0:X}", err));
}
Thread.Sleep(2000);
}
Please use Cdecl calling convention for that function. Don't ask me why, it just works.
[DllImport("EDSDK.dll", CallingConvention=CallingConvention.Cdecl)]
public extern static uint EdsCreateEvfImageRef(IntPtr inStreamRef, out IntPtr outEvfImageRef);
[DllImport("EDSDK.dll",CallingConvention=CallingConvention.Cdecl)]
public extern static uint EdsDownloadEvfImage(IntPtr inCameraRef, IntPtr outEvfImageRef);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With