0 / 0 / 0
Регистрация: 24.11.2017
Сообщений: 6
|
|||||||||||||||||||||||||||||||||||||||||
1 | |||||||||||||||||||||||||||||||||||||||||
Тонкости использование нативных dll в C#24.11.2017, 09:41. Показов 1508. Ответов 10
Метки нет (Все метки)
Добрый день. Сразу прошу прошения C# я занимаюсь всего 2 месяца.
Имею нативную DLL на Си для общения с 3D джойстиком. Прототипы функции реализованные на Си 1. Функции чтения параметров.
Чтение параметров реализована через синхронную функцию "шедулера" 2. Прототип фунции
3. Реализация функции Callback
Я реализовал следующий вариант использования на C# Прототипы функций из DLL
Реализация Callback
Эта функция вызывается каждые 100 мс. И мне не нравится вариант что постоянно создаются новые объекты: object data= Data; long[] temp = (long[])pUserData; Подскажите правильный метод решения задачи. Исходников Dll у меня нет
0
|
24.11.2017, 09:41 | |
Ответы с готовыми решениями:
10
Использование нативных библиотек Путь изучения С++ для написания нативных dll библиотек? Использование String Tables в .dll(.dll.mui) (Для VB .NET) Использование функций DLL из другой DLL |
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,605
|
|
24.11.2017, 10:17 | 2 |
sprutkmv, а где тут объекты создаются? Кроме
int[] arr = new int[6]; я ничего такого не вижу. Вы может создать ОДИН экземпляр массива и переиспользовать его.
0
|
0 / 0 / 0
Регистрация: 24.11.2017
Сообщений: 6
|
|
24.11.2017, 10:24 [ТС] | 3 |
а разве в таком варианте он не создает объект long[] temp = (long[])pUserData;
В принципе память не течет, так что наверно остановлюсь на таком варианте.
0
|
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,605
|
|
24.11.2017, 10:35 | 4 |
sprutkmv, это называется "приведение типа". Существующий тип начинает трактоваться как другой. Нигде ничего не создаётся.
1
|
0 / 0 / 0
Регистрация: 24.11.2017
Сообщений: 6
|
|||||||||||
24.11.2017, 10:45 [ТС] | 5 | ||||||||||
Теперь понял. Подскажите как грамотно привести структуру
0
|
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,605
|
|
24.11.2017, 11:03 | 6 |
sprutkmv, что?
Добавлено через 54 секунды Вам из полей структуры нужно массив получить?
0
|
0 / 0 / 0
Регистрация: 24.11.2017
Сообщений: 6
|
|||||||||||||||||||||
24.11.2017, 11:11 [ТС] | 7 | ||||||||||||||||||||
мне удобнее использовать функцию
В C# что бы функция hdGetLongv передала несколько значений я ей передаю первый элемент массива ref temp[0]. Теперь мне нужно long[] temp привести к TEncoderData
0
|
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,605
|
|
24.11.2017, 11:35 | 8 |
sprutkmv, в C# вам тоже нужно работать со структурой. И передавать указатель на неё, а не ссылку на первый элемент массива.
0
|
0 / 0 / 0
Регистрация: 24.11.2017
Сообщений: 6
|
|
24.11.2017, 11:40 [ТС] | 9 |
А как это сделать.
Разве C# не размещает поля структуры по своему усмотрению
0
|
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,605
|
|
24.11.2017, 11:45 | 10 |
sprutkmv, размещает. Но ему можно дать указание как размещать поля в структуре. Посмотрите, пожалуйста, данный замечательный FAQ. Там много по вашей теме.
1
|
0 / 0 / 0
Регистрация: 24.11.2017
Сообщений: 6
|
|
24.11.2017, 11:54 [ТС] | 11 |
Я правильно понимаю, что мой вопрос можно решить только используя так называемый "не безопасный код"?
Спасибо буду изучать
0
|
24.11.2017, 11:54 | |
24.11.2017, 11:54 | |
Помогаю со студенческими работами здесь
11
Загрузка нативных библиотек Использование DLL Использование Dll Использование dll в c++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |