Подключение DLL на C++ к проекту - C#

Узнай цену своей работы

Формулировка задачи:

Моим преподавателем было дано задание, в котором необходимо реализовать работу с ассемблерными вставками на C#. Так как подобным ранее я ни разу не занимался, то возникли проблемы. А если быть точнее, то к проекту на C# подключается DLL на С++ (подключается с помощью DllImport), где и вызываются процедуры на языке ассемблера. Но в момент вызова метода из DLL программа прекращает работу с AccessViolationException. Подключение библиотеки в основном проекте:
 [DllImport("Sorting_on_asm.dll", SetLastError = true)]
 static extern void asm_fast_sort(string[] massiv, int dlina);
Содержимое DLL:
extern "C" int fastasm (string*[], int);
extern "C" int q_sort (int , int);
 
extern "C"__declspec(dllexport) void asm_fast_sort (string* arr[], int count)
{
    int kol = count;
    fastasm(arr, kol);
    q_sort(0, kol - 1);
}
Буду благодарен за любую подсказку и помощь)

Решение задачи: «Подключение DLL на C++ к проекту»

textual
Листинг программы
    void func ([MarshalAs(UnmanagedType.LPStr)] string str); //маршалинг параметра-строки из неуправляемого кода 
 
    
    public static string StringFrom(byte[] lpstr) //можно строку гонять как массив байт(передавая еще и длину строки) 
    {
      int c = 0;
      while(c < lpstr.Length && lpstr[count] != 0)
      count++;
      return Encoding.GetEncoding(1251).GetString(lpstr, 0, count);//- и помучаться с кодировкой
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы