|
Модераторы: bsa |
|
vlsaf |
|
||||
Опытный Профиль Группа: Участник Сообщений: 423 Регистрация: 9.5.2007 Репутация: нет Всего: 1 |
Программа, написанная на С# вызывает функцию из прилинкованной dll-ки. Как-то так
Т.е. заранее размерность массива А не известна. Программа на С++ сама его создает и той размерности, которой сочтет нужным. Сигнатура функции на С++ очень простая
Функция на С++ должна создать одномерный массив А размерностью N и вернуть его в вызывающую функцию на C#. Подскажите, как это сделать? |
||||
|
|||||
borisbn |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Есть подозрение, что это не получится. Никак. Массив в до-диезе это не просто указатель как в Си++.
И в любом случае в функцию на Си нужно передавать указатель на указатель. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
vlsaf |
|
|||
Опытный Профиль Группа: Участник Сообщений: 423 Регистрация: 9.5.2007 Репутация: нет Всего: 1 |
Может я не правильно написал сигнатуру функции?
Может ее надо как-то по другому писать? Вопрос остается тот-же, как написать на С++ функцию, чтобы она возвращала массив в С# |
|||
|
||||
borisbn |
|
||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Может быть как-то так получится... Не проверял Это сообщение отредактировал(а) borisbn - 18.4.2014, 12:43 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
Guinness |
|
|||
Опытный Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
||||
|
||||
vlsaf |
|
|||
Опытный Профиль Группа: Участник Сообщений: 423 Регистрация: 9.5.2007 Репутация: нет Всего: 1 |
Оно наверняка получится, но если использовать Marshal.Copy, то при достаточном частом обращении к функции и большому объему копируемой матрицы, будет тратиться заметное время. Нужно разместить возвращанмую матрицу в памяти, доступной для C# кода, чтобы не копировать. В другом форуме подсказали использовать выдение памяти в С++ либо через GlobalAlloc либо через CoTaskMemAlloc. Пока не знаю как это все должно крутиться :( |
|||
|
||||
DarthTon |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 106 Регистрация: 7.2.2009 Репутация: 1 Всего: 6 |
Компилить с /clr. |
|||
|
||||
vlsaf |
|
|||
Опытный Профиль Группа: Участник Сообщений: 423 Регистрация: 9.5.2007 Репутация: нет Всего: 1 |
Спасибо. В понедельник попробую.
Понимаю так, что dll уже надо засовывать в C# проекте, как обычно, в reference (т.е. это уже управляемый код)? ImportDll уже не нужен. Сигнатура вызова этой функции из C# уже обычная?
Это сообщение отредактировал(а) vlsaf - 20.4.2014, 11:22 |
|||
|
||||
vlsaf |
|
|||
Опытный Профиль Группа: Участник Сообщений: 423 Регистрация: 9.5.2007 Репутация: нет Всего: 1 |
Попробывал. Код на C# подцепил управляемую сборку. Увидел функцию MyFunk, но студия определила сигнатуру вот так:
Этого мне нужно было избежать, т.к. ref нужно заранее инициализировать. |
|||
|
||||
Guinness |
|
|||
Опытный Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
||||
|
||||
vlsaf |
|
||||
Опытный Профиль Группа: Участник Сообщений: 423 Регистрация: 9.5.2007 Репутация: нет Всего: 1 |
Guinness, супер!
на плюсах нужен был параметр [Оut]
Потом вызываю функцию:
Все идет на ура! Массив А становится размером такой, как нужно!!! Всем спасибо за подсказки. Это сообщение отредактировал(а) vlsaf - 21.4.2014, 10:46 |
||||
|
|||||
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |