Как использовать msxml с Экспрессом Visual Studio 2008 года (никакие классы ATL), не становясь сумасшедшим?

Псевдонимы более «как бы» вверху каждого файла, компилятор вставлял

using string = System.String;
using int = System.Int32;
using decimal = System.Decimal;

и т. Д.

Я не верю, что именно так компилятор реализует 1 sup> встроенных псевдонимов, но это общий эффект. Когда вы используете с использованием директив псевдонима , вам также не нужно иметь директиву using для включающего их пространства имен, и это не приводит к тому, что оно включает в себя включающее пространство имен в область действия. [115 ]


1 sup> Мой поисковик в репозитории Roslyn github подводит меня.

6
задан Name 21 January 2009 в 22:25
поделиться

5 ответов

Я рад, что отправил свой вопрос, хотя у меня уже было решение, потому что я получил несколько альтернативных решений. Спасибо за все Ваши ответы.

Используя другой синтаксический анализатор, такой как эмигрант или возможно, меньший (не настолько мощный, но достаточно для моих потребностей) TinyXML мог на самом деле быть хорошей идеей (и помочь портировать программу на другую операционную систему).

Используя #import директива, по-видимому, Microsoft определенное расширение для упрощения использования COM, также интересна и принесла мне к следующей веб-странице MSXML in C++ but as elegant as in C#, которые объясняют, как упростить использование msxml как можно больше.

1
ответ дан 10 December 2019 в 00:45
поделиться

Возможно, попытайтесь использовать #import оператор.

Я использовал его в проекте VS6, у меня есть брожение вокруг, Вы делаете что-то вроде этого (в иллюстративных целях только; это работало на меня, но я не утверждаю, что был ошибочным доказательством):

#import  "msxml6.dll"

  ...

MSXML2::IXMLDOMDocument2Ptr pdoc;
HRESULT hr = pdoc.CreateInstance(__uuidof(MSXML2::DOMDocument60));
if (!SUCCEEDED(hr)) return hr;

MSXML2::IXMLDOMDocument2Ptr pschema;
HRESULT hr = pschema.CreateInstance(__uuidof(MSXML2::DOMDocument60));
if (!SUCCEEDED(hr)) return hr;

pschema->async=VARIANT_FALSE;
VARIANT_BOOL b;
b = pschema->loadXML(_bstr_t( /* your schema XML here */ ));

MSXML2::IXMLDOMSchemaCollection2Ptr pSchemaCache;
hr = pSchemaCache.CreateInstance(__uuidof(MSXML2::XMLSchemaCache60));
if (!SUCCEEDED(hr)) return hr;

_variant_t vp=pschema.GetInterfacePtr();
pSchemaCache->add(_bstr_t( /* your namespace here */ ),vp); 

pdoc->async=VARIANT_FALSE;
pdoc->schemas = pSchemaCache.GetInterfacePtr();
pdoc->validateOnParse=VARIANT_TRUE;
if (how == e_filename)
    b = pdoc->load(v);
else
    b = pdoc->loadXML(bxmldoc);

pXMLError = pdoc->parseError;
if (pXMLError->errorCode != 0)
    return E_FAIL; // an unhelpful return code, sigh....
7
ответ дан 10 December 2019 в 00:45
поделиться

Другая опция была бы для использования другого синтаксического анализатора XML, который уже сделан, такие как эмигрант. Это избегает необходимости использовать ATL и сложности COM, и является путем, легче, чем реализация Вашего собственного. Я предлагаю это только becasue, Вы заявили, что причина, Вы смотрите на msxml, состоит в том, потому что Вы не хотите реализовывать свой собственный синтаксический анализатор.

1
ответ дан 10 December 2019 в 00:45
поделиться

Почему Вы не используете некоторую обертку MSXML, которая экранировала бы Вас, формируют COM, такой как кофе "арабика"?

0
ответ дан 10 December 2019 в 00:45
поделиться

Можно использовать TinyXML. Это - открытый исходный код и больше по независимому от платформы.

1
ответ дан 10 December 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: