Link to home
Start Free TrialLog in
Avatar of cmain
cmain

asked on

#import msxml3.dll + msxml.idl

I would like to import msxml3.dll using a #import because that way I get the smart pointers.

This requires the use of the MSXML2 namespace. I cannot leave out the namespace with
using namespace MSXML2 because the symbols conflict and become ambiguous.

I also wish to use IXMLDOMDocument pointers in my idl file, but idl does not recognise namespaces.

There is a conflict here that I cannot resolve.
If you know how to use the #import and reference the imported symbols in an idl please let me know.
This is a common problem to which there seems to be no solution?

Regards
-craig.
Avatar of DanRollins
DanRollins
Flag of United States of America image

In the IDL file, can't you just use a generic IDispatch pointer?  Just make sure the clients are aware that it is an MSXML3::IXMLDOMDocument .  I think that is stndard operating procedure.

-- Dan

P.S.  That namespace stuff caused me endless grief when I first started using IXMLDOMDocument.
Avatar of cmain
cmain

ASKER

Yes, I could do that.
It works reasonably well using IUnknown pointers. The problem is that my customers want strongly typed interfaces; and I cannot, in all good consience, disagree with them!

Regards
-craig.
Worth a try:  Post a 0-pt question with a title like:
   IDL and namespace
and in the question put a link to this Q:

   https://www.experts-exchange.com/mfc/Q.20277317.html

Post it in the XML TA and C++ TA.  Some of those experts distain MFC...

Here is a link to a google thread

http://groups.google.com/groups?hl=en&ie=ISO-8859-1&oe=ISO-8859-1&threadm=eXSw7n90AHA.1576%40tkmsftngp03&rnum=7&prev=/groups%3Fq%3DIDL%2Band%2Bnamespace%2Band%2Bxml%26btnG%3DGoogle%2BSearch%26hl%3Den%26ie%3DISO-8859-1%26oe%3DISO-8859-1

In the final post, the guy seems to know what he is talking about.

Perusing some related thereads, it seesm that there is some agreement that problem is that Microsoft seriously goofed in how they set up MSXML.  We wouldn't need to use namespaces at all if they had planned ahead.

At least one person thinks that it is simply impossible to pass an IXMLDomDocument accross a COM interface.

In the final post in this thread, the user says that s similar post was fixed by installiung the latesd Platform SDK.

http://groups.google.com/groups?hl=en&ie=ISO-8859-1&oe=ISO-8859-1&threadm=250901c07cd0%243e6879d0%2434862ecf%40cpmsftngxa05&rnum=46&prev=/groups%3Fq%3DIDL%2Band%2Bnamespace%2Band%2Bxml%26hl%3Den%26ie%3DISO-8859-1%26oe%3DISO-8859-1%26start%3D40%26sa%3DN

Good luck.

-- Dan


Avatar of cmain

ASKER

Hi Dan,

I think that the one person who thinks it cannot be done is correct. They have seriously screwed up on the namespaces. The midl compiler should be able to ascertain that IXMLDOMDocument is isomorphic to MSXML2::IXMLDOMDocument and it cannot.

I have searched quite a bit. The only way to actually get it vaguely correct is to use 'using namespace MSXML2' in stdafx.h. The problem with this is that you need to spend hours hacking out the standard headers because they include the older xml declarations.

M$ don't do a whole lot correctly when it comes to c++.

Regards
-craig.
ASKER CERTIFIED SOLUTION
Avatar of DanRollins
DanRollins
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial