|
0 / 0 / 0
Регистрация: 24.04.2019
Сообщений: 11
|
||||||||||||||||
Импорт библиотеки из С++ на С#01.12.2019, 11:24. Показов 2429. Ответов 18
Добрый день, коллеги. Требуется небольшая помощь.
Имеется библиотека написанная на С++, требуется использовать ее в проекте на С#. Для экспорта я использую атрибут DllImportAttribute. Так выглядит вызов функции на С++:
Для её поиска пришлось воспользоваться DUMPBIN.EXE. Ну и сама суть. Вызов команды я делаю следующим образом:
0
|
||||||||||||||||
| 01.12.2019, 11:24 | |
|
Ответы с готовыми решениями:
18
Импорт DLL библиотеки Импорт библиотеки в MVS |
|
Администратор
|
||
| 01.12.2019, 13:03 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 24.04.2019
Сообщений: 11
|
|
| 01.12.2019, 15:07 [ТС] | |
|
К ,сожалению, почему-то не могу отредактировать первое сообщение, ну да ладно.
Функция использует WinAPI методы. По итогу, если все хорошо, то она генерирует некий документ и возвращаемое значение будет 0. Иначе код ошибки. Если считать код ошибки в переменной result, он будет равен переменной error. Автор об этом сам говорит. Если глянуть таблицу ошибок Win32Error, то получаем "ERROR_FILE_NOT_FOUND", что говорит, что не найден некий файл. Какой и почему я понять не могу. Dll файл находится. Функция внутри него тоже.
0
|
|
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
|
||
| 01.12.2019, 15:44 | ||
|
У вас кстати строки передаются как Unicode, а DLL судя по сигнатуре использует ASCII... Может в этом проблема?
0
|
||
|
0 / 0 / 0
Регистрация: 24.04.2019
Сообщений: 11
|
|
| 01.12.2019, 16:02 [ТС] | |
|
Пробовал по разному и ASCII, в том числе. Ошибка все равно такая же.
Я вот думаю, а может сама функция из библиотеки неправильно экспортирована? Исходный код DLL увы посмотреть не могу.
0
|
|
|
Администратор
|
||
| 01.12.2019, 21:16 | ||
|
shad_lew, есть пример правильного вызова этой функции на C++? Чтобы было с чем сравнивать.
0
|
||
|
0 / 0 / 0
Регистрация: 24.04.2019
Сообщений: 11
|
|
| 02.12.2019, 06:53 [ТС] | |
|
OwenGlendower, есть. Находится внутри другой программы.
Попробовал использовать софтину, которую вы предложили. Там порядка сотни процессов вышло. Есть и те, у которых статус "NAME_NOT_FOUND". Таких достаточно. В общем привело в очередной тупик.
0
|
|
|
Администратор
|
|||
| 02.12.2019, 07:37 | |||
|
0
|
|||
|
0 / 0 / 0
Регистрация: 24.04.2019
Сообщений: 11
|
|
| 02.12.2019, 09:26 [ТС] | |
|
В аргументы string1, string2 передается просто строка с текстом. К файлам никакого дела не имеет.
Я поставил фильтр именно на экзешный файл, который и использует данную либу. Вот там и было сотни логов. Хочу сказать, что логи с процедурой "load image" все завершены с статусом успешно. На плюсах то все работает.
0
|
|
|
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
|
|
| 02.12.2019, 10:39 | |
|
shad_lew, 1)
const PBYTE если мне не изменяет память то это обычный IntPtr в C# зачем городить unsafe если можно сделать сразу нормально2) По куску кода не видно что из себя у Вас представляет буфер, возможно вы просто не тот указываете? 3) ну и если файл не находит то не имея Вашей библиотеки, более чем как сказали выше Вам не помочь, анализируйте "выхлоп" монитора и ищите что не нашло.
0
|
|
|
0 / 0 / 0
Регистрация: 24.04.2019
Сообщений: 11
|
||||||||||||||||
| 02.12.2019, 11:51 [ТС] | ||||||||||||||||
|
SeIZVeIZ, на самом деле я кое-что не стал говорить, у функции есть еще 2 параметра.
В оригинале она выглядит так:
Я просто не думал, что параметры функции вообще важны при такой ошибке. Есть отдельно коды ошибки, которые говорят о неправильных данных в аргументах. Собственно я вызываю так:
Пример небезопасного кода посмотрел в других примерах. Там тоже либу из С++ на C# используют.
0
|
||||||||||||||||
|
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
|
|
| 02.12.2019, 12:27 | |
Сообщение было отмечено shad_lew как решение
Решение
shad_lew, Гуглите маршалинг, ваши структуры так же можно безопасно упаковать и передавать Intptr и не использовать не безопасный код. Для упаковки и распаковки структур есть два метода PtrToStructure и StructureToPtr буфер так же можно перевести в Intptr а для строк необходимо указать какие это строки, для этого используйте атрибуты преобразования MarshalAs.
Добавлено через 5 минут shad_lew, вот никотин для этого специально старался Класс Marshal, использование PInvoke, небезопасный код (unsafe)
0
|
|
|
0 / 0 / 0
Регистрация: 24.04.2019
Сообщений: 11
|
|
| 02.12.2019, 12:47 [ТС] | |
|
Andreyip, согласен с вами полностью. Сам хочу избавиться от небезопасного кода.
Буду переделывать тогда. Статью никотина уже изучил подробно, уж было ему в личку хотел написать (но ее нет). Спасибо за направление. Но все равно хочу пока разобраться почему же код ошибки такой.
0
|
|
|
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
|
|
| 02.12.2019, 12:58 | |
|
shad_lew, Вам бы по хорошему подэбажить Вашу С++ библиотеку чтобы понять что конкретно не нравится ей, пока с нашей стороны это просто "пальцем в небо"
0
|
|
|
0 / 0 / 0
Регистрация: 24.04.2019
Сообщений: 11
|
|
| 02.12.2019, 13:05 [ТС] | |
|
SeIZVeIZ, я бы с радостью, но увы способов не знаю.
Может вы подскажите какой-то?
0
|
|
|
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
|
|
| 02.12.2019, 13:08 | |
|
Лучше всего дебажить библиотеку сделать свою реализацию и сравнить данные с отладкой на C++. Тем более говорите что код у вас есть. Я так понимаю код коммерческий поэтому вы не спешите его выкладывать.
0
|
|
|
0 / 0 / 0
Регистрация: 24.04.2019
Сообщений: 11
|
|
| 02.12.2019, 16:05 [ТС] | |
|
Andreyip, да он является коммерческим, поэтому код в открытый доступ пустить не могу.
Что ж, будет переписывать вызов функции и пытаться отследить, что делает эта либа.
0
|
|
|
3 / 2 / 1
Регистрация: 09.12.2019
Сообщений: 17
|
|
| 09.12.2019, 09:19 | |
|
Andreyip, приветик, тут в личные сообщения писать нельзя, ты вроде как знаешь с# не мог бы дать один микро совет?) Просто я скрипт пишу, и одну строчку реализовать не могу. Я могла бы там не знаю дать свой вк?) Или тут это запрещено?
0
|
|
|
Администратор
|
|
| 09.12.2019, 10:17 | |
|
FeSTI, если вопрос связан с данной темой, то задайте его прямо здесь. Если нет, то создайте новую тему.
0
|
|
| 09.12.2019, 10:17 | |
|
Помогаю со студенческими работами здесь
19
Импорт библиотеки с Гитхаба в Студию через compile Неуправляемая DLL библиотека. Импорт, создание класса библиотеки Импорт данных из Access в Excel с использованием объекта Recordset библиотеки ADODB Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|