Имеется функция в dll, которая создает массив строк внутри себя и возвращает его + количеств элементов по указателю в аргументе(С++):
extern "C" __declspec(dllexport) char** GetListAdapters(int*);
Как мне импортировать эту функцию в приложении .NET C#? И, что самое важное, получить все значения массива строк?
Моя С++ функция:
char** WINAPI MyCppFunc(int * count)
{
char** result = new char*[3];
result[0] = "qwerty";
result[1] = "1234567890";
result[2] = "!";
*count = 3;
return result;
}
.NET импорт:
[DllImport("CppDll.dll")]
public static extern IntPtr MyCppFunc(ref int count);
И получение массива строк:
int count = 0;
IntPtr ptr = MyCppFunc(ref count);
string[] result = new string[count];
for (int i = 0; i < count; i++)
{
IntPtr charPtr = Marshal.ReadIntPtr(ptr + i * Marshal.SizeOf<IntPtr>());
result[i] = Marshal.PtrToStringAnsi(charPtr);
}
Вам нужно будет узнать точное имя экспортируемой функции (в моем примере через def файл они совпадают), например, через утилиту dumpbin. Она идет вместе со студией.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости