Может быть, это немного нубский вопрос, но это то, что вызывает у меня рассол в течение последних нескольких часов (или дней) ...
Я вызываю метод из DLL в моем коде в .NET Framework 4.0
[DllImport("xeneth.dll")]
public static extern ErrorCode XC_GetFrame(Int32 h, FrameType type, ulong ulFlags, IntPtr buff, uint size);
и затем использовать его здесь:
if (XC_GetFrame(myCam, XC_GetFrameType(myCam), 0, IntPtr.Zero, (uint)fs) != ErrorCode.E_NO_FRAME)
Однако, когда я запускаю это в .NET 4.0, я получаю ошибку P / INVOKE, однако ... выполнение этого в 3.5 не вызывает эту ошибку. После того, как я и другой программист просмотрели код, мы, кажется, отложили его до IntPtr, работающего по-другому на 4.0.
Мое приложение должно работать в .NET 4.0, так как пара функций, необходимых для приложения, доступна только в 4.0 ...
Есть что-нибудь, что, возможно, я пропускаю или просто забыл включить?
Любые мысли очень ценятся!
Tom
Обновление:
Родная декларация:
virtual ErrCode XCamera::GetFrame(FrameType type, unsigned long ulFlags, void *buffer, unsigned int size)
Ошибка: вызов функции PInvoke 'DLLTest! DLLTest.Form1 :: XC_GetFrameType' разбалансировал стек. Это вероятно потому, что управляемая подпись PInvoke не совпадает с неуправляемой целевой подписью. Убедитесь, что соглашение о вызовах и параметры подписи PInvoke соответствуют целевой неуправляемой подписи.