|
1 / 1 / 1
Регистрация: 06.03.2016
Сообщений: 64
|
||||||||||||||||||||||||||
Как в C# импортировать функцию из DLL C++, которая возвращает интерфейсное значение?05.11.2018, 00:59. Показов 2810. Ответов 6
Мне нужно получить из библиотеки C++ функцию, возвращающую интерфейс. Однако на стороне шарповского кода возникает ошибка (ниже).
Заголовочные файлы:
"В среде выполнения обнаружена критическая ошибка. Ошибка произошла по адресу 0x7056a574 в потоке 0xb08. Код ошибки 0xc0000005. Она может быть вызвана ошибкой в CLR или в небезопасных либо не поддающихся проверке фрагментах пользовательского кода. Обычно источниками таких ошибок бывают ошибки упаковки, допускаемые пользователями при COM-взаимодействии, либо PInvoke, повредивший стек." Как исправить эту проблему? Или, возможно, есть более правильный способ получить интерфейсное значение?
0
|
||||||||||||||||||||||||||
| 05.11.2018, 00:59 | |
|
Ответы с готовыми решениями:
6
Как импортировать вызываемую из dll функцию, если эта функция возвращает значение типа ppchar Как вызвать функцию которая принимает значение int а возвращает float? Написать функцию Factorial, которая возвращает значение значение факториала целого числа. |
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
|
||||||
| 05.11.2018, 03:48 | ||||||
|
Не знаю как насчет использования интерфейса напрямую, но с помощью структуры вполне себе работает
Вот тут можно почитать как сделать именно с интерфейсом https://stackoverflow.com/ques... in-c-sharp
2
|
||||||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
|
|||||||||||
| 05.11.2018, 17:36 | |||||||||||
Сообщение было отмечено WhiscasH как решение
Решение
Вот так работает напрямую с интерфейсом
1
|
|||||||||||
|
1 / 1 / 1
Регистрация: 06.03.2016
Сообщений: 64
|
|
| 06.11.2018, 12:32 [ТС] | |
|
Второй код выдает ошибку:
Вызвано исключение: "System.Runtime.InteropServices.COMExcep tion" в project5.exe Необработанное исключение типа "System.Runtime.InteropServices.COMExcep tion" в project5.exe Неопознанная ошибка (Исключение из HRESULT: 0x80004005 (E_FAIL)) в System.StubHelpers.InterfaceMarshaler.Co nvertToManaged(IntPtr pUnk, IntPtr itfMT, IntPtr classMT, Int32 flags) в строке, где вызывается функция делегата GetInterface().
0
|
|
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
|
|
| 06.11.2018, 13:54 | |
|
Скорее всего что-то не так сделали. У меня ошибок не возникает.
0
|
|
|
1 / 1 / 1
Регистрация: 06.03.2016
Сообщений: 64
|
|
| 06.11.2018, 20:17 [ТС] | |
|
Странно, но ваш код на C++ Visual Studio вообще не читает. В частности строчку #include "unknwn.h". Я могу его подключить через #include <Unknwn.h>, но в вашем проекте Intellisense даже не может найти этот модуль. Да и в начале Visual Studio вообще ругался, пришлось скачать .NET Framework 4.7.2, только тогда проект запустился. Однако код c++ так же подчеркивает красным.
Добавлено через 15 минут Все, я решил проблему. Создал новый проект и в него вставил ваш код, немного изменив имена модулей, и все заработало. Действительно, ошибся, когда под себя подгонял.
0
|
|
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
|
||
| 06.11.2018, 20:43 | ||
|
0
|
||
| 06.11.2018, 20:43 | |
|
Помогаю со студенческими работами здесь
7
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|