#cpp
void SharedDoubleArrGet(double outArr[])
Этот топик читают: Гость
Ответов: 176
Рейтинг: 12
|
|||
Имеется MFC dll написанная на C++. Нужно из пакета windows вызывать функцию:
|
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
карма: 1 |
|
Ответов: 176
Рейтинг: 12
|
|||
Делаю так. Вылетает с ран таймом
|
|||
карма: 0 |
|
Ответов: 3889
Рейтинг: 362
|
|||
toropchin, нельзя напрямую передавать текстовое имя глобальной переменной, и тип данных кодируется латинской буквой, список есть в одном из примеров. Непосредственно динамического массива чисел с плавающей запятой там, правда, нет (они всё равно по-разному реализованы в разных языках), зато есть Handle (Cardinal) и LongWord, которыми можно указать на выделенную область памяти (MemoryStream, например). Естественно, придётся работать с этими данными вручную, тут уж либо dll должна подстраиваться под тип данных программы (если компилируем её сами), либо - наоборот.
|
|||
карма: 1 |
|
Ответов: 3349
Рейтинг: 233
|
|||
Наши массивы другие, это классы с функция _get, _set, _count, реализации которых находятся в другом классе
------------ Дoбавленo в 09.12: Наши массивы другие, это классы с функция _get, _set, _count, реализации которых находятся в другом классе |
|||
карма: 1 |
|
Ответов: 5227
Рейтинг: 587
|
|||
Похоже тут только в рукопашную при помощи IC
|
|||
карма: 4 |
|
Ответов: 3889
Рейтинг: 362
|
|||
andrestudio писал(а): только в рукопашную при помощи ICТехнически на HiAsm с твоим элементом тоже можно, и я указал примерное направление, но согласен с тем, что работа дискретными компонентами с массивом дробных чисел формата c++ как с бинарными данными - мягко говоря "не красивое" решение. На IC это делается на порядок быстрее и проще, но не все этот самый IC знают, не будем забывать |
|||
карма: 1 |
|
Ответов: 5227
Рейтинг: 587
|
|||
toropchin писал(а): В функцию передать ссылку на одномерный массивIvann писал(а): Наши массивы другие, это классы с функция _get, _set, _count, реализации которых находятся в другом классе |
|||
карма: 4 |
|
Ответов: 176
Рейтинг: 12
|
|||
andrestudio писал(а): я так понял эта функция должна что-то с этим массивом сделать Функция просто копирует входной массив в другой массив. Код этой dll:
|
|||
карма: 0 |
|
Ответов: 5227
Рейтинг: 587
|
|||
toropchin, наши массивы на TData, выход один, делать в InlineCode.
|
|||
карма: 4 |
|
Ответов: 3349
Рейтинг: 233
|
|||
andrestudio, Неа, не один, можно использовать стримы
------------ Дoбавленo в 13.02: andrestudio, Неа, не один, можно использовать стримы |
|||
карма: 1 |
|
Ответов: 5227
Рейтинг: 587
|
|||
и это правда toropchin, если задумаешь так сделать то вызов в FormatStr будет таков code_25007.txt
|
|||
карма: 4 |
| ||
файлы: 1 | code_25007.txt [725B] [225] |
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 1 раз(а), последний 2017-03-03 16:19:06 |
|||
карма: 0 |
|
Ответов: 176
Рейтинг: 12
|
|||
Хм. Сообщение куда-то подевалось.
В архиве call_func_dll.rar схема и dll. Код dll на C++
1. Запускаем программу Test.exe 2. Ещё раз запускаем Test.exe 3. Нажимаем отправить данные в общую переменную в одной копии программы. 4. Нажимаем получить данные из общих переменных в другой копии программы. Со строковыми данными этот трюк не проходит. Либо вылетает программа, либо кракозябры получает из общих переменных. Ниже две кнопочки для Int данных. Здесь всё работает. Почему со строками не работает? ------------ Дoбавленo в 20.01: Прикрепил видео. Сначала демонстрируются рабочие функции. А затем, те которые не работают. Ну и сразу видно для чего нужны общие переменные внутри dll. http://au01.ru/Video_Call_Func_Dll.rar ------------ Дoбавленo в 21.40: Может проблема из-за того, что в функцию нужно передавать параметр типа PChar? Хотя в таком виде и отправляю данные в неё. Ничего не понимаю.... ------------ Дoбавленo в 22.29: Ещё дополнение. Вот так не работает:
Почему не работает, если строку читать из точки? |
|||
карма: 0 |
| ||
файлы: 2 | code_25068.txt [673B] [214], call_func_dll.rar [641.4KB] [135] |
Ответов: 3349
Рейтинг: 233
|
|||
toropchin, Ты её сначала в переменную запихни
------------ Дoбавленo в 11.35:
|
|||
карма: 1 |
|