Импорт функции из DLL

180
15 декабря 2018, 14:50

Мне необходимо импортировать функцию из DLL написанную на Delphi:

function MaterialLibraryCreate: real; stdcall;

Пытаюсь импортировать так:

[DllImport("dll.dll", CallingConvention = CallingConvention.StdCall)]
public extern static void MaterialLibraryActivate(int a);

Но выходит эта ошибка:

Вызов функции PInvoke "Xtreme3d-Test!Xtreme3d_Test.xtreme3d::MaterialLibraryActivate" разбалансировал стек. Вероятно, это вызвано тем, что управляемая сигнатура PInvoke не совпадает с неуправляемой целевой сигнатурой. Убедитесь, что соглашение о вызовах и параметры сигнатуры PInvoke совпадают с неуправляемой целевой сигнатурой.

А также при вызове функции:

function CameraSetViewDepth(camera,depth: real): real; stdcall;

Вот так:

[DllImport(path, CallingConvention = CallingConvention.StdCall)]
public static extern double CameraSetViewDepth(double camera, double depth);

Выходит исключение:

System.AccessViolationException: "Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена."

Answer 1
  1. Если в функции на Delphi идёт возвращение real, то в C# это должна быть double.
  2. Помогло то, что я поменял названия параметров на те, которые были в самой функции.
READ ALSO
Определение типа в обобщенном методе

Определение типа в обобщенном методе

Мне нужен обобщенный метод, получающий коллекцию Control'ов из gridMain по критерию, переданному делегатом, опирающимся на их Tag (целое число)Задачу...

139
Защита приложения

Защита приложения

Есть такой вопрос:

139
Какой шейдер использовать?

Какой шейдер использовать?

Шейдеры только начинаю изучатьЗадача такая: у объекта есть полностью прозрачные и полностью непрозрачные части

173
Оригинальный размер изображения

Оригинальный размер изображения

Программно добавляю картинку, но как устанавливать ей оригинальный размер как у источника, а не auto или от себя ?

150