Подключение DLL на C++ к проекту - C#
Формулировка задачи:
Моим преподавателем было дано задание, в котором необходимо реализовать работу с ассемблерными вставками на C#. Так как подобным ранее я ни разу не занимался, то возникли проблемы. А если быть точнее, то к проекту на C# подключается DLL на С++ (подключается с помощью DllImport), где и вызываются процедуры на языке ассемблера. Но в момент вызова метода из DLL программа прекращает работу с AccessViolationException.
Подключение библиотеки в основном проекте:
Содержимое DLL:
Буду благодарен за любую подсказку и помощь)
[DllImport("Sorting_on_asm.dll", SetLastError = true)] static extern void asm_fast_sort(string[] massiv, int dlina);
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);//- и помучаться с кодировкой }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д