Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
 Аватар для Argus19
1433 / 450 / 78
Регистрация: 24.09.2017
Сообщений: 2,533
Записей в блоге: 23

Как написать библиотеку на С++ для программ на VB 6.0

19.12.2024, 18:58. Показов 5370. Ответов 58

Студворк — интернет-сервис помощи студентам
Часто разбрасываюсь и забываю о многом. Скомпилировал две статьи из интернета и добавил кое-что своё.
Прошу исправить ошибки, если что-то неправильно описал и дополнить, если что-то упустил. Делал фактически "на скаку".
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.12.2024, 18:58
Ответы с готовыми решениями:

Написать синтезатор используя библиотеку conio.h для подключения клавиатуры и библиотеку Windows.h для Beep
Написать синтезатор используя библиотеку conio.h для подключения клавиатуры и библиотеку Windows.h для Beep(частота,длительность). ...

Как написать dll библиотеку для lua?
Скажите пожалуйста, как написать dll библиотеку для lua. попробовать так не вышло. // dllmain.cpp : Определяет точку входа для...

Как написать библиотеку для работы с сокетами?
Всем привет. Я написал программу клиент-сервер,передающую некий буфер серверу. Теперь хочу сделать это все в виде DLL библиотеки,однако...

58
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
19.12.2024, 22:06
А документацию всё-таки постарался написать, несмотря на критику The Trick'а... За это лайк, конечно)))
0
 Аватар для Argus19
1433 / 450 / 78
Регистрация: 24.09.2017
Сообщений: 2,533
Записей в блоге: 23
20.12.2024, 08:36  [ТС]
Цитата Сообщение от HackerVlad Посмотреть сообщение
А документацию всё-таки постарался написать
Чтобы хотя бы самому не забыть.
Я ещё даже не думал в сторону передачи самописной структуры в библиотеку. Если с "казёнными" структурами всё понятно, то с самописными, непонятно.
0
1389 / 845 / 92
Регистрация: 08.02.2017
Сообщений: 3,607
Записей в блоге: 2
20.12.2024, 12:16
Цитата Сообщение от Argus19 Посмотреть сообщение
Если с "казёнными" структурами всё понятно, то с самописными, непонятно.
А в чем проблемма то? В VB и С++ определяете одну и ту же структуру. Из VB передаете эту структуру в функцию в C++ получаете или не так?
0
Эксперт по электронике
6841 / 3265 / 338
Регистрация: 28.10.2011
Сообщений: 12,752
Записей в блоге: 7
20.12.2024, 13:31
Цитата Сообщение от testuser2 Посмотреть сообщение
Из VB передаете эту структуру в функцию в C++ получаете или не так?
Бывают разные приколы, типа битовых полей, выравнивания полей и др. https://habr.com/ru/articles/142662/
1
1389 / 845 / 92
Регистрация: 08.02.2017
Сообщений: 3,607
Записей в блоге: 2
20.12.2024, 13:54
Цитата Сообщение от locm Посмотреть сообщение
Бывают разные приколы
Я немного в курсе, что бывают разное выравнивание и это конечно интересно, какое по умолчанию выравнивание в С++. Судя первым примерам из статьи по умолчанию оно там такое же. Допустим, я проверил приведенную в статье структуру
C++
1
2
3
4
5
6
7
struct Foo
{
    char ch;
    short id;
    short opt;
    int value;
};
Code
1
2
3
4
5
6
7
8
9
10
11
12
      1 байт: ch
      2 байт: пусто
      3 байт: id[0]
      4 байт: id[1]
      5 байт: opt[0]
      6 байт: opt[1]
      7 байт: пусто
      8 байт: пусто
      9 байт: value[0]
    10 байт: value[1]
    11 байт: value[2]
    12 байт: value[3]
В VB все точно также
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Type Foo
    ch As Byte
    id As Integer
    opt As Integer
    value As Long
End Type
 
Sub asdfdsafsaf()
    Dim tvar As Foo, ptvar As Long
    
    ptvar = VarPtr(tvar)
    
    With tvar
        Debug.Print "ch ", (VarPtr(.ch) - ptvar) + 1; " байт"
        Debug.Print "id ", (VarPtr(.id) - ptvar) + 1; " байт"
        Debug.Print "opt ", (VarPtr(.opt) - ptvar) + 1; " байт"
        Debug.Print "value ", (VarPtr(.value) - ptvar) + 1; " байт"
    End With
End Sub

Code
1
2
3
4
ch             1  байт
id             3  байт
opt            5  байт
value          9  байт
0
 Аватар для Argus19
1433 / 450 / 78
Регистрация: 24.09.2017
Сообщений: 2,533
Записей в блоге: 23
20.12.2024, 15:14  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
Из VB передаете эту структуру в функцию в C++ получаете или не так?
Я с этим не имел дела. Читаю интернет.
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
22.12.2024, 21:20
Argus19, есть еще нюансы с ANSI->UNICODE конверсией. Почитай на досуге эту тему - какие могут быть неочевидные последствия такой конвертации.
1
 Аватар для Argus19
1433 / 450 / 78
Регистрация: 24.09.2017
Сообщений: 2,533
Записей в блоге: 23
22.12.2024, 22:44  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
какие могут быть неочевидные последствия такой конвертации.
Почитал. Я знаю, что вернуть из функции С++ строку не получится. Можно вернуть только массив байт. Какое-то время назад разбирался с этим в ветке С++.
По вашей ссылке дебаты о СОМ-порте. Это тоже интересно. У меня сейчас тривиальная задача: по таймеру пулять запрос и получать ответ. Пока есть два варианта: получать показания датчиков или показания вычислителя. С этим разберусь. Производитель адекватный. На вопросы отвечает. Сам протокол байтовый. Текстовых строк не предусматривает. Вы помогли разобраться с преобразованием байтового массива во float. Это было проблемой. Потрошить биты регистр статуса - не вопрос. Писать в файл Excel тоже не вопрос.
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
22.12.2024, 22:49
Цитата Сообщение от Argus19 Посмотреть сообщение
Я знаю, что вернуть из функции С++ строку не получится. Можно вернуть только массив байт. Какое-то время назад разбирался с этим в ветке С++.
Вернуть можно. Преобразования касаются и передаваемых структур.
0
 Аватар для Argus19
1433 / 450 / 78
Регистрация: 24.09.2017
Сообщений: 2,533
Записей в блоге: 23
22.12.2024, 23:31  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Вернуть можно.
Интересно. Нужно строку конвертировать в формат, понятный VB.
Цитата Сообщение от The trick Посмотреть сообщение
Преобразования касаются и передаваемых структур.
И это интересно.
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
23.12.2024, 03:14
Мы же вполне прекрасно работаем в VB6 со всеми функциями API, которые возвращают строку, все Wide-функции. Поэтому ничего не мешает самому сделать так же как и Microsoft. Строки значит легко передавать, только придётся указывать размер буфера, для простоты как в Windows API.

Добавлено через 2 минуты
Лично я бы делал так же как и в любых Windows API короче, которые работают со строками. Все Windows API написаны ведь на C++.
0
 Аватар для Argus19
1433 / 450 / 78
Регистрация: 24.09.2017
Сообщений: 2,533
Записей в блоге: 23
23.12.2024, 06:00  [ТС]
Цитата Сообщение от HackerVlad Посмотреть сообщение
Все Windows API написаны ведь на C++.
А не на чистом С?
0
dive
 Аватар для I can
4961 / 4661 / 845
Регистрация: 13.04.2015
Сообщений: 9,862
23.12.2024, 06:05
Цитата Сообщение от HackerVlad Посмотреть сообщение
на C++.
- -
Windows API - это API на основе языка C. Функции и структуры данных могут использоваться через синтаксис C, включая windows.h, но API может использоваться через любой язык программирования, который может взаимодействовать со структурами данных API и соглашениями о вызовах для вызовов функций и обратных вызовов.

Следует отметить, что реализация функций API была разработана на нескольких языках, отличных от C.
0
1389 / 845 / 92
Регистрация: 08.02.2017
Сообщений: 3,607
Записей в блоге: 2
23.12.2024, 07:14
Такие вещи, как строки safearray и variant это-то уже классы, это должен быть C++
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
23.12.2024, 08:51
Цитата Сообщение от testuser2 Посмотреть сообщение
это-то уже классы
Нет, это всё ещё структуры.
0
1389 / 845 / 92
Регистрация: 08.02.2017
Сообщений: 3,607
Записей в блоге: 2
23.12.2024, 09:14
Нет, это всё ещё структуры.
обслуживание этих структур-то вроде осуществляется классами, выделение/освобождение памяти и т.д.

Добавлено через 5 минут
Например, если я в среде vba выделю память и помещу указатель просто в структуру, то при падении сеанса эта память не освободится. Но если я создам safearray и помещу этот указатель в него, то при сбое среды он освободит память по этому указателю
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
23.12.2024, 09:49
Цитата Сообщение от testuser2 Посмотреть сообщение
обслуживание этих структур-то вроде осуществляется классами, выделение/освобождение памяти и т.д.
В документации по использованию структуры SAFEARRAY никаких классов нет:
https://learn.microsoft.com/ru... rraycreate
1
1389 / 845 / 92
Регистрация: 08.02.2017
Сообщений: 3,607
Записей в блоге: 2
23.12.2024, 12:08
Вот здесь есть про класс basic_string и класс variant https://learn.microsoft.com/ru... w=msvc-170
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
23.12.2024, 12:54
testuser2, в сети есть исходники XP там вроде как на С OLE Automation написана.

Цитата Сообщение от Argus19 Посмотреть сообщение
Интересно. Нужно строку конвертировать в формат, понятный VB.
Так это никакой не секрет, тип строк в VB6 - BSTR. Нужно учитывать что API задекларированные через Declare делают конвертацию строк. Чтобы такого не было нужно API декларировать в библиотеке типов, либо делать возврат через Long, дополнительно перемещая указатели. Возможно я сделаю когда-нибудь фикс чтобы исключить преобразование строк в Declare функциях.

Цитата Сообщение от Argus19 Посмотреть сообщение
И это интересно.
В структурах строки также конвертируются в ANSI.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.12.2024, 12:54
Помогаю со студенческими работами здесь

Составить библиотеку программ для решения матричных уравнений
Помогите пожалуйста, очень срочно! написать программу в турбо паскале!зарание спасибо! и желательно с блок схемой Составить...

Copy Hook. Или как написать библиотеку для перехвата копирования
Возник такой интересный вопрос. Я пользуюсь программой SuperCopier2. Эта программа заменяет стандартный диалог копирования\перемещения, но...

Как написать тест программ для след класса
Задача написать тест программу кот выполняет проверку Student class: The three-argument Student class constructor The enroll member...

Как используя библиотеку fsream записать в одну строку результаты из двух программ?
У меня есть имеется 2 программы, которые записывают результат в csv файл. Из первой программы записывается значение Opt из второй все...

Ищу библиотеку для создания программ обмена между ПЛК и ПК через программатор AMSAMOTION (USB - MPI адаптер)
И второй вопрос - имеется программатор AMSAMOTION (USB - MPI адаптер). Где можно скачать библиотеку и документацию к драйверу для данного...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru