не получается добавить ATL simple object

144
25 ноября 2020, 07:40

Создал ATL Project, в него пытаюсь добавить простой ATL объект.
Назвал компонент Indexer, вижла создает соответсвующий интерфейс и класс
Однако в файле Indexer.h автогенерируется куча кода скучей ошибок:

Не понимаю почему вижла не видит соответствующие переменные\классы, она же вроде как их сама сделала.

код в Index.h

// Indexer.h : Declaration of the CIndexer
#pragma once
#include "resource.h"       // main symbols

#include "components_i.h"

#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
#error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms."
#endif
using namespace ATL;

// CIndexer
class ATL_NO_VTABLE CIndexer :
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<CIndexer, &CLSID_Indexer>,
    public IDispatchImpl<IIndexer, &IID_IIndexer, &LIBID_componentsLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
    CIndexer()
    {
    }
DECLARE_REGISTRY_RESOURCEID(106)

BEGIN_COM_MAP(CIndexer)
    COM_INTERFACE_ENTRY(IIndexer)
    COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()

    DECLARE_PROTECT_FINAL_CONSTRUCT()
    HRESULT FinalConstruct()
    {
        return S_OK;
    }
    void FinalRelease()
    {
    }
public:

};
OBJECT_ENTRY_AUTO(__uuidof(Indexer), CIndexer)
Answer 1

У вас не определены GUIDы в Indexer.h, что, собственно, и говорится в сообщениях об ошибке. Хотя нужно еще глянуть components_i.h, но там явно тоже этого нет. Такие ляпы в автоматически сгенерированном коде совсем не редкость - стоит только чуть отойти от стандартных настроек визарда, и результат часто даже не компилируется.

Перенесите все макросы DEFINE_GUID в stdafx.h, и их же плюс #include <initguid.h> поместите в stdafx.cpp. Ну и на будущее имейте в виду, что сгенерированный код нужно отлаживать так же, как и свой.

READ ALSO
Аналог frexp (из С++ math.h) в С#

Аналог frexp (из С++ math.h) в С#

Пытаюсь перенести проект с C++ на C#, однако в SystemMath C# отсутствует функция разложения на экспоненту и мантиссу (frexp в C++)

118
Значение return

Значение return

Я не понимаю, куда и что возвращает оператор returnВ функции main это говорит о завершении программы с кодом 0 (успешно), а что происходит в других...

88
Счетчик css counter

Счетчик css counter

Нужно чтоб счетчик состоял из 3 чисел, например 001, 002, 003 при переходе на 10 элемент было 010

116