Мой проект успешно работает без ошибок в работе .NET Framework 3.5. Но, когда я нацеливаю его на работу .NET Framework 4. Я получил ошибку:Вызов функции PInvoke имеет несбалансированный стек. Вероятно, это связано с тем, что управляемый PInvoke .. (.NET 4)
Вызов функции PInvoke несбалансированный стек. Вероятно, потому что управляемая подпись PInvoke не соответствует неуправляемой целевой сигнатуре. "
Я использовал неуправляемую библиотеку, как показано ниже:
[StructLayout(LayoutKind.Sequential)]
public class DGNElemCore
{
public int offset;
public int size;
public int element_id;
public int stype;
public int level;
public int type;
public int complex;
public int deleted;
public int graphic_group;
public int properties;
public int color;
public int weight;
public int style;
public int attr_bytes;
public IntPtr attr_data;
public int raw_bytes;
public IntPtr raw_data;
}
[DllImport("DgnLib.dll", EntryPoint = "DGNOpen")]
public static extern IntPtr DGNOpen(string fileName, int bUpdate)
вы знаете, как исправить эту ошибку?
http://stackoverflow.com/questions/13006580/error-calling-c-dll-function-in-c-sharp? предполагает, что тип возвращаемого значения должен быть 'DGNElemCore', а не' IntPtr' (btw: я обнаружил, что, выполнив поиск Google для 'DGNOpen pinvoke' - это был второй ответ ... сразу после вашего дубликата этого вопроса в MSDN) –
@MarcGravell: Но 'DGNOpen' возвращает' DGNHandle', который, я считаю, является указателем void, поэтому 'IntPtr' является правильным типом. Или я что-то упустил? –
* Вы знаете, как исправить эту ошибку? * Да, я знаю, как это сделать. Но это зависит от видения родных деклараций. Это interop. Задавать вопрос только с половиной интерфейса - это игра с хвостом на осле. –