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

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

19.12.2024, 18:58. Показов 4762. Ответов 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
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
19.12.2024, 22:06
А документацию всё-таки постарался написать, несмотря на критику The Trick'а... За это лайк, конечно)))
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
20.12.2024, 08:36  [ТС]
Цитата Сообщение от HackerVlad Посмотреть сообщение
А документацию всё-таки постарался написать
Чтобы хотя бы самому не забыть.
Я ещё даже не думал в сторону передачи самописной структуры в библиотеку. Если с "казёнными" структурами всё понятно, то с самописными, непонятно.
0
1382 / 838 / 89
Регистрация: 08.02.2017
Сообщений: 3,510
Записей в блоге: 1
20.12.2024, 12:16
Цитата Сообщение от Argus19 Посмотреть сообщение
Если с "казёнными" структурами всё понятно, то с самописными, непонятно.
А в чем проблемма то? В VB и С++ определяете одну и ту же структуру. Из VB передаете эту структуру в функцию в C++ получаете или не так?
0
Эксперт по электронике
6524 / 3153 / 332
Регистрация: 28.10.2011
Сообщений: 12,370
Записей в блоге: 7
20.12.2024, 13:31
Цитата Сообщение от testuser2 Посмотреть сообщение
Из VB передаете эту структуру в функцию в C++ получаете или не так?
Бывают разные приколы, типа битовых полей, выравнивания полей и др. https://habr.com/ru/articles/142662/
1
1382 / 838 / 89
Регистрация: 08.02.2017
Сообщений: 3,510
Записей в блоге: 1
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
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
20.12.2024, 15:14  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
Из VB передаете эту структуру в функцию в C++ получаете или не так?
Я с этим не имел дела. Читаю интернет.
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
22.12.2024, 21:20
Argus19, есть еще нюансы с ANSI->UNICODE конверсией. Почитай на досуге эту тему - какие могут быть неочевидные последствия такой конвертации.
1
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
22.12.2024, 22:44  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
какие могут быть неочевидные последствия такой конвертации.
Почитал. Я знаю, что вернуть из функции С++ строку не получится. Можно вернуть только массив байт. Какое-то время назад разбирался с этим в ветке С++.
По вашей ссылке дебаты о СОМ-порте. Это тоже интересно. У меня сейчас тривиальная задача: по таймеру пулять запрос и получать ответ. Пока есть два варианта: получать показания датчиков или показания вычислителя. С этим разберусь. Производитель адекватный. На вопросы отвечает. Сам протокол байтовый. Текстовых строк не предусматривает. Вы помогли разобраться с преобразованием байтового массива во float. Это было проблемой. Потрошить биты регистр статуса - не вопрос. Писать в файл Excel тоже не вопрос.
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
22.12.2024, 22:49
Цитата Сообщение от Argus19 Посмотреть сообщение
Я знаю, что вернуть из функции С++ строку не получится. Можно вернуть только массив байт. Какое-то время назад разбирался с этим в ветке С++.
Вернуть можно. Преобразования касаются и передаваемых структур.
0
 Аватар для Argus19
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
22.12.2024, 23:31  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Вернуть можно.
Интересно. Нужно строку конвертировать в формат, понятный VB.
Цитата Сообщение от The trick Посмотреть сообщение
Преобразования касаются и передаваемых структур.
И это интересно.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 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
1427 / 444 / 78
Регистрация: 24.09.2017
Сообщений: 2,525
Записей в блоге: 22
23.12.2024, 06:00  [ТС]
Цитата Сообщение от HackerVlad Посмотреть сообщение
Все Windows API написаны ведь на C++.
А не на чистом С?
0
sleep
 Аватар для I can
4916 / 4567 / 838
Регистрация: 13.04.2015
Сообщений: 9,698
23.12.2024, 06:05
Цитата Сообщение от HackerVlad Посмотреть сообщение
на C++.
- -
Windows API - это API на основе языка C. Функции и структуры данных могут использоваться через синтаксис C, включая windows.h, но API может использоваться через любой язык программирования, который может взаимодействовать со структурами данных API и соглашениями о вызовах для вызовов функций и обратных вызовов.

Следует отметить, что реализация функций API была разработана на нескольких языках, отличных от C.
0
1382 / 838 / 89
Регистрация: 08.02.2017
Сообщений: 3,510
Записей в блоге: 1
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
1382 / 838 / 89
Регистрация: 08.02.2017
Сообщений: 3,510
Записей в блоге: 1
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
1382 / 838 / 89
Регистрация: 08.02.2017
Сообщений: 3,510
Записей в блоге: 1
23.12.2024, 12:08
Вот здесь есть про класс basic_string и класс variant https://learn.microsoft.com/ru... w=msvc-170
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru