Аватар для bedvit
1208 / 259 / 22
Регистрация: 20.05.2016
Сообщений: 1,139
Записей в блоге: 22

Singleton в ATL или single-instance object

07.03.2018, 10:04. Показов 1840. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем Привет!
Кратко: ATL библиотека в Visual Studio 2017 создает Singleton решение.
Мне оно НЕ НУЖНО.
Что я делаю не так?
Шаги (элементарный пример):
1.Файл - создать проект ATL - "ATLProject1"
"тип приложения dll", "проверка в жизненном цикле...", т.е. настройки по умолчанию.
2.Далее проект-новый элемент-библиотека ATL-простой объект ATL - "ATLSimpleObject"(в Visual Studio 2015 - через добавить класс ATL) - опять же все по умолчанию, ничего не трогаю (потоковая модель-подразделение,агрегирование да, интерфейс - двойной).
3.В интерфейс (вид-представление классов) класса ATLSimpleObject (ключик) добавляем свойство "DOUBLE" тип свойства "DOUBLE". Передаем по значению.
4.В ATLSimpleObject.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// ATLSimpleObject.cpp: реализация CATLSimpleObject
 
#include "stdafx.h"
#include "ATLSimpleObject.h"
 
// CATLSimpleObject
double x = 0;
 
STDMETHODIMP CATLSimpleObject::get_DOUBLE(DOUBLE* pVal)
{
    // TODO: добавьте код реализации
    *pVal = x;
    return S_OK;
}
 
STDMETHODIMP CATLSimpleObject::put_DOUBLE(DOUBLE newVal)
{
    // TODO: добавьте код реализации
    x = newVal;
    return S_OK;
}
5.В "ATLSimpleObject.rgs" - добавляем ProgID
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
HKCR
{
 
    NoRemove CLSID
    {
        ForceRemove {fb129354-87eb-4c2e-b55b-ea5d3291da2e} = s 'ATLSimpleObject class'
        {
            ProgID = s 'ATLProject1.ATLSimpleObject.1'
            VersionIndependentProgID = s 'ATLProject1.ATLSimpleObject'
 
            ForceRemove Programmable
            InprocServer32 = s '%MODULE%'
            {
                val ThreadingModel = s 'Apartment'
            }
            TypeLib = s '{366f8443-61c3-4409-838b-aba825ad2c97}'
            Version = s '1.0'
        }
    }
}
6.Все - собираем регаем: regsvr32 "C:\Users\...\Documents\Visual Studio 2017\Projects\ATLProject1\x64\Debug\ATLP roject1.dll"
7.Смотрим работу, к примеру в VBA, подключаем через References "ATLProject1Lib":
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub Test()
Dim BI As ATLSimpleObject
Dim BI2 As ATLSimpleObject
Set BI = New ATLSimpleObject
Set BI2 = New ATLSimpleObject
BI.DOUBLE = 13
BI2.DOUBLE = 14
 
Debug.Print BI.DOUBLE
Debug.Print BI2.DOUBLE
Два объекта возвращают 14! А должны 13 и 14, создаем через New.
Через CreateObject - то же самое.
Где я упускаю?

Вот здесь написано следующее:
If an object has registered itself as a single-instance object, only one instance of the object is created, no matter how many times CreateObject is executed.

На каком этапе у меня "registered itself as a single-instance object"?
Буду благодарен за пояснение.

Добавлено через 12 часов 45 минут
Нет идей, почему создается всего один объект com?
Могу приложить исходник.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.03.2018, 10:04
Ответы с готовыми решениями:

Single instance application
как сделать single instance application на wpf? на windows forms делал через Microsoft.VisualBasic.ApplicationServices, а тут не знаю :(

Нулевые значения баз данных. Object reference not set to an instance of an object
В базе данных существуют пустые поля. Из базы осуществляется вывод на веб страницу в поля ввода. Поля соответствующие нулевым значениям...

NullReferenceException: Object reference not set to an instance of an object в FindObjectType как исправить?
Ошибка NullReferenceException: Object reference not set to an instance of an object в FindObjectType как исправить? скрипт 1 public...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.03.2018, 10:04
Помогаю со студенческими работами здесь

Скрипт не работает - NullReferenceException: Object reference not set to an instance of an object MissionSay.S
Нужный элемент со скриптом MissionPlayer.cs есть Версия Unity: 5.4.1 Код: using UnityEngine; using System.Collections;

Вызов внешних функций. Object reference not set to an instance of an object
Написал обычный dll на С++. Есть в ней функция которая создает объект на удаленном компе и возвращает строку. Есть Web Service, в...

NullReferenceException: Object reference not set to an instance of an object - как исправить?
Здравствуйте, разбирался с unity и UI в нём после определённого момента, при попытке обратиться к методу .AddToor(); unity стал выдавать...

Проблема с unity:NullReferenceException: Object reference not set to an instance of an object
Делаю игру на юнити первый раз. И возникла такая ошибка: Когда я запускаю игру мой объект пульку из вот этого состояния: ...

HtmlAgilityPack выбрасывает исключение Object reference not set to an instance of an object
Помогите пожалуйста разобраться. Есть такой html код Хочу получить строку "Начало". Пишу такой код string adress =...


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

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

Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru