Napisałem dll VC++. Zgłoszenie o jednej z metod w DLL jest następujący:Niezbilansowany stos!
extern "C" _declspec(dllexport)
void startIt(int number)
{
capture = cvCaptureFromCAM(number);
}
Używam tego dll w kod C# przy użyciu P/Invoke. Robię deklarację jako:
[DllImport("Tracking.dll", EntryPoint = "startIt")]
public extern static void startIt(int number);
i wywołania funkcji w kodzie jak:
startIt(0);
Teraz, kiedy spotyka się ten wiersz, kompilator rzuca mi ten błąd:
A call to PInvoke function 'UsingTracking!UsingTracking.Form1::startIt' 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.
Nie mogę zrozumieć, dlaczego powoduje to błąd, ponieważ podpis w kodzie zarządzanym i niezarządzanym jest taki sam. Co więcej, w mojej drugiej maszynie ten sam kod działa doskonale w visual studio. Więc to sprawia, że myślę, że błąd jest źle prowadzony.
Proszę o pomoc.
Dzięki
Czy jest to jeden z twoich maszyn x86 i drugi x64? –
Nie, oba to x86. Właśnie ten uruchamia Win7 i inny XP – Jayesh