c#client to c ++ msxml sax parser com对象奇怪的行为

时间:2013-03-01 09:17:26

标签: c# c++ interop saxparser msxml

我在c ++中实现了一个com对象,该对象使用SAXXMLReader60接口来验证针对xsd架构的一些xml文件。

我还实施了SAXContentHandlerImplSAXErrorHandlerImplMySAXSchemaDeclHandler(源自IMXSchemaDeclHandler),如此处所述(xml primer, the book),以便能够获取有关的信息错误,架构和内容。

所以如果com从c ++客户端调用,一切正常,但是如果com已经从c#client调用(使用“interop”)它仍然正常,除了我每次都得到一个空{{1方法中的指针:

oSchemaElement

virtual HRESULT STDMETHODCALLTYPE MySAXSchemaDeclHandler::schemaElementDecl( /* [in] */ ISchemaElement *oSchemaElement ) { // oSchemaElement is not null here, it points to somewhere // but contains nothing } SAXContentHandlerImplSAXErrorHandlerImplIMXSchemaDeclHandler绑定的代码的这一部分。我对这部分代码表示怀疑:

ISAXXMLReaedr

这就是我从c#client(4.0 .NET)调用com的方法:

ISAXXMLreader* pReader = NULL;
HRESULT hr = CoCreateInstance(__uuidof(SAXXMLReader60),NULL,CLSCTX_ALL,    __uuidof(ISAXXMLReader),(void **)&pReader);

IXMLDOMSchemaCollectionPtr pSchemaCache = NULL;
hr = pSchemaCache.CreateInstance(__uuidof(XMLSchemaCache60));
_variant_t vSchemaCache(new IXMLDOMSchemaCollectionPtr);

V_VT(&vSchemaCache) = VT_DISPATCH;
V_DISPATCH(&vSchemaCache) = pSchemaCache;

MySAXSchemaDeclHandler *pMySAXSchemaDeclHandler = new MySAXSchemaDeclHandler();
_variant_t vSchemaDecl(new MySAXSchemaDeclHandler());

V_VT(&vSchemaDecl) = VT_DISPATCH;
V_DISPATCH(&vSchemaDecl) = pMySAXSchemaDeclHandler;

hr = pReader->putFeature(L"schema-validation", TRUE);
hr = pReader->putProperty(L"schemas", vSchemaCache);
hr = pReader->putProperty(L"schema-declaration-handler", vSchemaDecl);

pReader->parseURL("books.xml");

有没有建议如何解决问题?

顺便说一下,我使用的是Visual Studio 2010,msxml6.0,Windows 7。

0 个答案:

没有答案