Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22

Вернуть строку из .dll на С++ в программу на VB 6.0

02.02.2020, 12:54. Показов 4946. Ответов 46
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Перепробовал несколько вариантов. Не получается. Постоянно ошибки.
Последний опробованный и не работающий вариант:
C++
1
2
3
4
string _stdcall mytext ()
{
    return "cyberforum 2020 г.";
}
Visual Basic
1
2
3
Private Declare Function mytext Lib "mybibl.dll" _
                            () As String
Label1 = mytext()
Пробовал возвращать строку
C++
1
2
           string a = "cyberforum 2020 г.";
       return a;
Уничтожается ли строка при выходе из .dll?
Как сделать правильно?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.02.2020, 12:54
Ответы с готовыми решениями:

Как вернуть строку из функции на C++ (которая находится в dll) в C# проект?
Добрый день, есть dll на C++, которая служит как бы оберткой к сишной библиотеке. В этой Dll есть класс public ref class ClassName,...

Как вернуть переменные из dll обратно в программу?
Есть dll в которой процедура берет несколько целочисленных переменных и оперируя ими изменяет их, но собственно как вернуть их обратно в...

Вернуть HBITMAP из c++ dll
Во общем есть dll, в ней функция которая сохраняет в bmp файл, сохраняет из HBITMAP переменной, как мне сделать так, что б эту переменную...

46
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.02.2020, 19:45
Студворк — интернет-сервис помощи студентам
DestroyWindow() так же работает?
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
06.02.2020, 22:21  [ТС]
Определил с помощью GetConsoleProcessList PID процесса. Он соответствует программе, вызывающей .dll.

Добавлено через 12 минут
Цитата Сообщение от Avazart Посмотреть сообщение
DestroyWindow() так же работает?
Нет. Работает только SendMessage.

Добавлено через 2 часа 11 минут
Правильно срабатывает:
C++
1
FreeConsole();
Так же это находится в деструкторе. А, как вызвать деструктор, я не знаю.
0
262 / 151 / 33
Регистрация: 29.06.2019
Сообщений: 1,515
29.02.2020, 09:26
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Ещё есть такое понятие, как маршалинг. Но я сам не крутил, не подскажу
к #7:
насколько я поняла, его крутить не надо -
там по вашему линку так и сказано:
To save any marshaled values, you must copy the values to your own variables.
и приведены from - to какие типы в какие могут переводиться...
т.е. копируем с указателя in-value (внутри самой dll) ==> в variable, работаем с variable, потом ==> результат обратно присваиваем указателю out-value ==> его и возвращаем, т.е. результат... - но по сути этот указатель, куда помещаем результат, уже изначально законнектен на приложение (источник входных данных и приёмник результата от dll) --- вроде такова суть ATL-библиотек
0
262 / 151 / 33
Регистрация: 29.06.2019
Сообщений: 1,515
29.02.2020, 18:35
не там запостила про COMdll BSTR use - оставлю линк здесь - там после =============

Добавлено через 16 минут
Цитата Сообщение от Argus19 Посмотреть сообщение
Уничтожается ли строка при выходе из .dll?
вообще-то вы её, вероятно, хотите вернуть на клиент (своё приложение) с сервера (сама dll)...
прстенький пример в IDE Ultimate++ C++v.11
dllmy.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef _dllmy_dllmy_h
#define _dllmy_dllmy_h
 
#if defined (__cplusplus)
extern "C"
{
#endif
  __declspec(dllexport) double simpleVersion();
#if defined (__cplusplus)
}
#endif
 
#endif    //FEET_H

dllmy.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <windows.h>
#include "dllmy.h"
 
BOOL WINAPI DllMain (HANDLE hModule, DWORD reason,  LPVOID lpReserved)
{
    switch (reason) {
    case DLL_PROCESS_ATTACH:
        break;
    case DLL_PROCESS_DETACH:
        break;
    case DLL_THREAD_ATTACH:
        break;
    case DLL_THREAD_DETACH:
        break;
    }
    return TRUE;
}
 
const double version = 2.5;
 
double  simpleVersion() {
    //cout << version << endl;
    return version;
}

dll_use.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <windows.h>
 
using namespace std;
 
typedef double(__cdecl *MYPROC)();     //тип
MYPROC ProcAddress;    // переменная этого типа
 
int main(int argc, const char *argv[])
 
{
    double x;   //for not to exitcode  - to see Console
    //load lib     
    HINSTANCE dll_handle = LoadLibrary("C:\\upp\\out\\MyApps\\MINGW.Debug.Debug_Full.Dll.Noblitz\\dllmy.dll");
        if (!dll_handle) {
            cerr << "Unable to load DLL!\n" << endl;
            return 1;
        }
        else if (dll_handle) {
             cout << "dll loaded!\n" << endl;
             
            //load function - get pointer to it
             ProcAddress=(MYPROC)GetProcAddress(dll_handle, "simpleVersion");
             if (ProcAddress != NULL) {
             cout << "simpleVersion() Function ADDRESS have got...\n" << endl;
             cout << ProcAddress() << endl; //load result of function
                 cout <<  "\n"<< endl;
            }
            // free dyn library
            if (dll_handle) {
            cout << "dll free lib..." << endl;
                FreeLibrary(dll_handle);
            cout << "dll freelib. done!" << endl;
        }
        }
 
    cin >> x;   //for not to exitcode  - to see Console
    return 0;
}

здесь правда на C++ и сервер, и клиент И передаётся double... но по передаче строк я ещё подумаю... (как подправить)
1
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
29.02.2020, 18:53  [ТС]
JeyCi, всё уже решено и работает.
Спасибо за дополнения. Посмотрю позже. Сейчас продолжаю "мастерить" библиотеку дальше.
0
262 / 151 / 33
Регистрация: 29.06.2019
Сообщений: 1,515
02.03.2020, 08:44
вообще, хорошее описание подходов к передаче строк в DLL - здесь (правда delphi - но линк оставлю)... для вывода по теме

Добавлено через 14 минут
просто нюанс:
Дельфийские строки передавать в DLL нельзя (можно только на чтение), т.к. менеджеры памяти разные... если идёт модификация - Вылез за пределы 128 и всё...
- поэтому используется ход конём по линку....
не знаю, есть ли такая проблема в VB6 при использовании с С++... но на заметку линк оставила...
1
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
02.03.2020, 19:27  [ТС]
JeyCi, в функцию С++ передаётся адрес буфера и его размер по
Visual Basic
1
ByRef
и в функции заполняем его строкой
C++
1
2
3
bool _stdcall mytext (char *buffer, int* buffer_size)
const std::string s = "строка текста";
strcpy(buffer,s.c_str());
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.03.2020, 19:27
Помогаю со студенческими работами здесь

Вернуть TBitmap из .dll
Доброго времени суток! Столкнулся со странным глюком, и как обойти не знаю, точнее не понимаю, чего от меня хотят. Возможно кто то...

Создать dll и вернуть из функции значение строки
вообщем надо на си сделать отдельную длл и вернуть значение а как не умею обьясните

Как вернуть значение (int) из созданной dll?
Есть набор форм, которые я сделал в виде dll. Внутри этой dll расположено дерево, со значениями: В другом проекте используется эта...

Как вернуть параметр атрибута из сборки .dll?
Здравствуйте! У меня есть сборка с тестами .dll, некоторые тесты отмечены Nunit атрибутом public void test() {}Мне нужно...

Как из c++ dll функции вернуть RGB\ARGB цвет?
Есть функция в ней есть переменная цвета типа COLORREF Подскажите, кто знает, каким образом можно вернуть значение этой переменной(то...


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

Или воспользуйтесь поиском по форуму:
47
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru