Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/92: Рейтинг темы: голосов - 92, средняя оценка - 4.58
vtodystov888

Реализация передачи указателя на объект через очередь сообщений

31.10.2007, 13:46. Показов 17068. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть объект(Variant). Мне надо , с помошью очереди сообщений , передать указатель на него из одного окна в другое. Я написал библиотеку с следующими обертками и классом:


Code
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
(MAXONESEGSIZE - 0x40)
Private Const MQ_MAX_MSGSIZE = &HF0
MAXWORD
Private Const NOPRIORITY = &HFFFF
"Message Queue name already in use.")
Private Const ERR_DUPLICATE_MQ = 1024 + 97
"Message Queue is empty.")
Private Const ERR_MQ_EMPTY = 1024 + 100
"Quit is pending on the Message Queue")
Private Const ERR_MQ_QUITTING = 1024 + 102
Размер константы Variant в байтах
Private Const VARIANT_SIZE = 16
Имя очереди сообщений
Private Const mName = "C_Queue"
 
Declare Function apiMQCreate Lib "nnotes.dll" Alias "MQCreate" (Byval QueueName As String, Byval Quota As Integer, Byval Options As Long) As Integer
Declare Function apiMQOpen Lib "nnotes.dll" Alias "MQOpen" (Byval QueueName As String, Byval Options As Long, RetQueue As Long) As Integer
Declare Function apiMQClose Lib "nnotes.dll" Alias "MQClose" (Byval Queue As Long, Byval Options As Long) As Integer
Declare Function apiMQPut Lib "nnotes.dll" Alias "MQPut" (Byval Queue As Long, Byval Priority As Integer, Byval Buffer As Variant, Byval Length As Integer, Byval Options As Long) As Integer
 
Declare Function apiMQGet Lib "nnotes.dll" Alias "MQGet" (Byval Queue As Long, Byval Buffer As Variant, Byval BufLength As Integer, Byval Options As Long, Byval timeout As Long, retMsgLength As Integer) As Integer
Declare Function apiMQGetCount Lib "nnotes.dll" Alias "MQGetCount" (Byval Queue As Long) As Integer
Declare Function apiOSLoadString Lib "nnotes.dll" Alias "OSLoadString" (Byval hModule As Long, Byval StringCode As Integer, Byval retBuffer As Lmbcs String, Byval BufferLength As Integer) As Integer
 
Public Class C_Queue
Хендл на очередь сообщений
Private hMQ As Long
Имя дескриптора очереди
Private misOwner As Integer
Private mAutoClose As Integer
 
Sub New
Dim status As Integer
 
misOwner=True
mAutoClose=True
 
If Len(mName)>0 Then
Если имя непустое, пытаемся создать очередь сообщений с этим именем
status= apiMQCreate(mName,NOPRIORITY,0)
Если очередь сообщений с таким именем уже есть,
то выставляем, что владелец - не эта форма
If status=ERR_DUPLICATE_MQ Then
Msgbox "SCAPI Q allready exist"
misOwner=False
Else
Msgbox "New SCAPI Q"
End If
Открываем очередь сообщений
apiCall "MQOpen", apiMQOpen(mName,0,hMQ)
End If
End Sub
 
 
Sub Delete
If misOwner And mAutoClose And hMQ<>0 Then Call apiMQClose(hMQ,0)
End Sub
 
Public Property Set Message As Variant
apiCall "MQPut:"+mName, apiMQPut(hMQ, NOPRIORITY, Message, VARIANT_SIZE, 0 )
End Property
 
Public Property Get Message As Variant
Dim msg As Variant
Dim ret As Integer
 
apiCall "MQGet:"+mName, apiMQGet(hMQ, msg, MQ_MAX_MSGSIZE, 0, 0, ret)
 
Message = msg
End Property
 
End Class
 
----------------------------------------------------------------------------
Обработчик ошибок:


Code
1
2
3
4
5
6
7
8
9
10
11
Private Sub apiCall(apiCallName As String, Status As Integer)
Dim Err_Mask As Integer
Dim errorStr As String
If Status = 0 Then Exit Sub
Err_Mask = &H3FFF
Status = Status And Err_Mask
 
errorStr =String(255,Clng(0))
Status = apiOSLoadString(0, Status, errorStr, Len(errorStr) - 1)
Error Status, apiCallName + "::"+errorStr
End Sub
Set вроде бы проходит, Variat в очередь пихается, а вот когда пытаюсь сделать Get система вылетает. На простых текстовых сообщениях эта штука работает нормально. Подскажите, что не так?
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.10.2007, 13:46
Ответы с готовыми решениями:

Как создать объект оператором new, если имеется только тип указателя на объект, переданный через шаблон?
Есть шаблон. Точно известно, что его параметр Т это указатель. Как с помощью new создать переменную типа *T ? Код приведенный ниже дает...

При передачи указателя на объект vector в качестве параметра при выполнении программы происходит ошибк сегметирования
Доброго всем времени суток. Помогите понять, почему происходит такая ситуация. ОС Linux Mint Используется clang Имеется код: ...

Передача указателя на объект класса через this
Всем участникам форума горячий ПРИВЕТ! Вопрос такой. cl.h class cl { public: void cl(); int a; private: DWORD...

8
0 / 0 / 0
Регистрация: 19.07.2007
Сообщений: 1,098
31.10.2007, 14:13
а что говорит?
0
0 / 0 / 0
Регистрация: 27.02.2007
Сообщений: 154
31.10.2007, 14:41
Для: vladislav888
Может так

Code
1
Set Message = msg
0
0 / 0 / 0
Регистрация: 19.07.2007
Сообщений: 1,098
31.10.2007, 16:24
Цитата Сообщение от Ronchik
Для: vladislav888
Может так

Code
1
Set Message = msg
Зачем? Message - по сути вариант... ошибку выдаст....
0
0 / 0 / 0
Регистрация: 27.02.2007
Сообщений: 154
31.10.2007, 16:41
Для: Sandr
какую ????
0
1 / 1 / 0
Регистрация: 04.08.2006
Сообщений: 2,950
31.10.2007, 16:41
Для: Ronchik
Variant не обьект, SET не нужен... хотяяяя
0
0 / 0 / 0
Регистрация: 19.07.2007
Сообщений: 1,098
31.10.2007, 16:55
Никаких хотяяяя... Если варианту передаем объект, тогда можно сет, иначе низя...
0
1 / 1 / 0
Регистрация: 04.08.2006
Сообщений: 2,950
31.10.2007, 17:02
Для: Sandr
так в том то и дело что х.з. что в даном случае получает вариант

имхо, проверка IsObject - может помоч, станет ясно - использовать SET или нет
0
0 / 0 / 0
Регистрация: 19.07.2007
Сообщений: 1,098
31.10.2007, 17:34
Ну, насколько я понял, человек пытается передать туда масив строк... или значение какого-то там итема...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.10.2007, 17:34
Помогаю со студенческими работами здесь

Реализация передачи файлов через com-порт
Здравствуйте, я только недавно начал изучать с#, мой скил соу лоу, так что для того чтобы сделать следующее задание мне нужна некоторая...

Отличие передачи по ссылке от передачи указателя ?
Чем отличаюся следующие коды? class MyClass{ int val; public: int get_val(){return val;} int set_val(int i){val=i;} }; ...

Реализация передачи файлов через Bluetooth и Wifi
Реализация Bluetooth. Мне нужно знать как с нуля реализовать возможности передачи файлов с устройства на котором есть блютус без всяких...

Очередь сообщений. Не могу поставить в очередь
День добрый, стоит задача обмениваться данными между двумя процессами по средствам очереди сообщений, написал вот такой код: #define...

Ошибка передачи указателя
Здравствуйте, пытаюсь запустить программу, но выдает такую ошибку: C:\Users\user\Documents\MyPrograms\C++\lab2\lab2\thread.cpp:26:...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru