1195 / 247 / 21
Регистрация: 20.05.2016
Сообщений: 1,084
Записей в блоге: 21
1

Singleton в ATL или single-instance object

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

Author24 — интернет-сервис помощи студентам
Всем Привет!
Кратко: 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\ATLProject1.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 делал через...

Нулевые значения баз данных. 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 в...

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

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

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

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

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

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


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

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

Новые блоги и статьи
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS, Swagger и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru