Импорт функции из DLL написанной на С++ - C#
Формулировка задачи:
Есть dll файл написанный на С++ (Visual Studio)
Работал с этой библиотекой в Autoit (скриптовый язык). Сейчас хочу сделать вызов из Visual Studio (C#)
Сигнатуры функций в AutoIt:
После двух вечеров чтения получилось вызвать первые две функции на C# таким образом:
Проблема появилась с третьим методом
В этой функции в третий параметр (out string) в dllке пишется результат. Возникает ошибка BEX
Пробовал различные сигнатуры для третьего параметра: просто String (без Marshak as LPstr), пробовал универсальный указатель - IntPtr. все равно результат один.
Помогите пожалуйста.
DllCall($scrapeDll, "int:cdecl", "OpenTablemap", "str", $name) DllCall($scrapeDll, "none:cdecl", "GetRegionPos", "str", $name, "int*", $posl, "int*", $post, "int*", $posr, "int*", $posb) DllCall($scrapeDll, "int:cdecl", "ReadRegion", "hwnd", $hWnd, "str", $name, "str*", "", "int", $offset)
[DllImport("M:\\WORK\\Bot\\Hopper\\IncludeFiles\\OpenScrapeDLL.dll",CallingConvention=CallingConvention.Cdecl)] public static extern int OpenTablemap(string name); [DllImport("M:\\WORK\\Bot\\Hopper\\IncludeFiles\\OpenScrapeDLL.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void GetRegionPos(string name, [Out]out int posl, [Out]out int post, [Out]out int posr, [Out] out int posb);
[DllImport("M:\\WORK\\Bot\\Hopper\\IncludeFiles\\OpenScrapeDLL.dll", CallingConvention = CallingConvention.Cdecl)] public static extern int ReadRegion(IntPtr hwnd, string name, /*[Out] out string*/[Out][MarshalAs(UnmanagedType.LPStr)]out string res, int offset);
Сигнатура проблемы: Имя события проблемы: BEX Имя приложения: TestIt.exe Версия приложения: 1.0.0.0 Отметка времени приложения: 55bc2923 Имя модуля с ошибкой: MSVCR80.dll Версия модуля с ошибкой: 8.0.50727.6229 Отметка времени модуля с ошибкой: 4ec352ab Смещение исключения: 00014584 Код исключения: c000000d Данные исключения: 00000000 Версия ОС: 6.1.7601.2.1.0.768.2 Код языка: 1049 Дополнительные сведения 1: e926 Дополнительные сведения 2: e9263950142051511ceadcb55c0aa80c Дополнительные сведения 3: 50c5 Дополнительные сведения 4: 50c5f26c14812fb53e761ddbe4594ddb
Тип "STR" в Autoit = тип "LPCSTR/LPSTR" в WindowsAPI
Решение задачи: «Импорт функции из DLL написанной на С++»
textual
Листинг программы
[DllImport("M:\\WORK\\Bot\\Hopper\\IncludeFiles\\OpenScrapeDLL.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] public static extern int ReadRegion(IntPtr hwnd, string name, [Out][MarshalAs(UnmanagedType.LPStr)]StringBuilder res, int offset);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д