ADN Open CIS
Сообщество программистов Autodesk в СНГ

29/05/2013

Ошибка PInvokeStackImbalance

Вопрос:

Я пытаюсь с помощью  P/Invoke вызвать acedPostCommand() чтобы прервать текущую команду, а получаю ошибку PInvokeStackImbalance при вызове acedPostCommand внутри моего .NET кода:

 

Как это можно исправить?

Вот формат описания P/Invoke который я использую:

Код - C#: [Выделить]
  1. [DllImport("acad.exe",
  2.   CharSet = CharSet.Unicode,
  3.   EntryPoint = "?acedPostCommand@@YAHPB_W@Z")]
  4. public static extern bool acedPostCommand(string cmd);

Ответ:

Нужно также указать соглашение о вызовах (calling convention). Вот так acedPostCommand() прекрасно вызывается:

Код - C#: [Выделить]
  1. [DllImport("acad.exe",
  2.   CharSet = CharSet.Unicode,
  3.   CallingConvention = CallingConvention.Cdecl,
  4.   EntryPoint = "?acedPostCommand@@YAHPB_W@Z")]
  5. public static extern bool acedPostCommand(string cmd);

 

Источник: http://adndevblog.typepad.com/autocad/2012/07/pinvokestackimbalance-error.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=54.0

Опубликовано 29.05.2013
Отредактировано 06.06.2013 в 12:31:32