Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Nicegg
0 / 0 / 1
Регистрация: 22.04.2013
Сообщений: 11
1

консоль+длл

11.03.2017, 20:11. Просмотров 182. Ответов 6
Метки нет (Все метки)

Нужно написать простую программу для вывода ФИО и учебной группы, пишем длл потом пишем консольное приложение, я написал но преподователь попросил то, что я не знаю как реализовать ибо учусь буквально с нуля. Подскажите как это реализовать?
"Ваша DLL-ка работать не будет, так как память, которую вы выделяете для хранения возвращаемых строк, будет освобождаться при завершении функций. Чтобы все работало правильно, вы должны выполнять копирование возвращаемых данных по адресу, который передаете в функцию в качестве аргумента."
собственно код source.cpp dll
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include "Header.h"
#include <string.h>
 
 
extern "C" __declspec(dllexport) char* __stdcall MeineFunction()
{
    char *imya = "menya zovyt Petya petrow\n";
    printf(imya);
    return imya;
}
 
extern "C" __declspec(dllexport) char* __stdcall MeineGruppa()
{
    char *grup = "Gruppa moya №\n";
    printf(grup);
    return grup;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2017, 20:11
Ответы с готовыми решениями:

окно из длл
появилась надобность сделать такую вещь: нужно сделать некую функцию вызываемую из длл по вызову...

Ограничение работы длл
Ребят помогите сделать так чтобы Dll написанная на C++ Visual Studio работала только 5 минут а...

Сборка ДЛЛ библиотеки
Проблема со сборкой ДЛЛ: В библиотеке должно быть несколько функций, которые необходимо вызывать...

Добавление ДЛЛ в проект
У меня есть программа на С++ и самописная длл на С# экзешник без неё не запускается вот вопрос как...

динамический массив из ДЛЛ
Здравствуйт, с наступившим!!!! Покажите, на примере, как вызват динамический массив из ДЛЛ, ну...

6
Selot
189 / 125 / 52
Регистрация: 19.01.2010
Сообщений: 509
Завершенные тесты: 2
12.03.2017, 13:53 2
Идея выделять память на стороне консоли и передавать ее в длл, по мне так не очень. Но если известен размер строки, то можно и так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// dll code
extern "C" __declspec(dllexport) void __stdcall MeineFunction(char* name)
{
    char *tmp = "menya zovyt Petya petrow\n";
    strcpy(name, tmp);
}
 
// console code
int main()
{
    char name_str[26];
    MeineFunction(name_str);
    printf(name_str);
}
0
avgoor
1041 / 609 / 157
Регистрация: 05.12.2015
Сообщений: 1,732
12.03.2017, 14:03 3
Цитата Сообщение от Selot Посмотреть сообщение
Идея выделять память на стороне консоли и передавать ее в длл, по мне так не очень.
А как, по вашему, очень?
0
Selot
189 / 125 / 52
Регистрация: 19.01.2010
Сообщений: 509
Завершенные тесты: 2
12.03.2017, 14:39 4
avgoor, динамически на стороне длл и возвращать указатель и размерность
0
avgoor
1041 / 609 / 157
Регистрация: 05.12.2015
Сообщений: 1,732
12.03.2017, 15:00 5
Цитата Сообщение от Selot Посмотреть сообщение
динамически на стороне длл и возвращать указатель и размерность
1) Т.е. на каждый чих будем дергать выделение памяти, массивы на стеке использовать не получится.
2) Кто владеет выделенной памятью? Кто и когда будет ее удалять? Заставить пользователей длл на каждый вызов библиотечной функции вызывать еще одну?
0
Selot
189 / 125 / 52
Регистрация: 19.01.2010
Сообщений: 509
Завершенные тесты: 2
12.03.2017, 15:22 6
avgoor, по ситуации. Я не говорю, что это панацея. Для набора данных заранее вызывать из длл функцию, возвращающую размерность, выделять память на своей стороне и обратно ее в длл - тоже не всегда удобно. Если известна размерность заранее и она не меняется, то можно и на стеке у себя выделить и отдать в длл.
0
avgoor
1041 / 609 / 157
Регистрация: 05.12.2015
Сообщений: 1,732
12.03.2017, 15:33 7
Selot, Вот вам кейс:
Загрузили длл. Что-то посчитали. Выгрузили длл. Продолжаем обрабатывать посчитанное.
При вашем подходе надо: Выделить память в длл, выделить память в приложении, скопировать, удалить память в длл.
Если что: память вделенную в длл можно удалять только в этой длл. После ее выгрузки неудаленная память повиснет.

Цитата Сообщение от Selot Посмотреть сообщение
выделять память на своей стороне и обратно ее в длл - тоже не всегда удобно.
Тем не менее, чуть менее чем вся библиотека C устроена по этому принципу (см. например, strcat())
Вы правда думаете, что ее разработчики глупее вас, раз не считают, что:
Цитата Сообщение от Selot Посмотреть сообщение
Идея выделять память на стороне консоли и передавать ее в длл, по мне так не очень.
0
12.03.2017, 15:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2017, 15:33

есть ли аналог ДЛЛ в линукс
возникла потребность запилить себе приложение под винду и линь (пишу на с++). тык вот, чтобы не...

Почему не может найти ресурс в ДЛЛ?
#include &lt;windows.h&gt; #include &lt;shellapi.h&gt; #include &lt;stdlib.h&gt; #include &lt;io.h&gt; int WINAPI...

Как импортировать длл в ресурсы и Экспортировать?
Здравствуйте, подскажите как правильно импортировать Dll в ресурсы, а затем программно извлечь dll...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru