Hi Jan,

Jan Dubois schrieb am 19.08.2010 um 11:11 (-0700):
> […] The "by value" and "by reference" assignments are implemented by 2
> different COM operation internally: propertyput and propertyputref.
> Normally all OLE properties will implement both, especially if they
> rely on some automated framework to implement their IDispatch
> interface.

Thanks for your great, fabulous explanation!

> You seem to be running into a property that has only implemented
> propertyput but not propertyputref, so the default syntax fails for
> you.  It means the corresponding code in VBscript would fail too:
> 
>     Set xslProc.input = xmlDoc
> 
> and only this one would work:
> 
>     xslProc.input = xmlDoc

It does fail in VBScript indeed:

          \,,,/
          (o o)
------oOOo-(_)-oOOo------
Option Explicit
' See: http://msdn.microsoft.com/en-us/library/ms753809%28VS.85%29.aspx
Dim xslt, xslDoc, xslProc, xmlDoc
Set xslt   = WScript.CreateObject("Msxml2.XSLTemplate.3.0")
Set xslDoc = WScript.CreateObject("Msxml2.FreeThreadedDOMDocument.3.0")
xslDoc.async = false
xslDoc.load "createProcessor.xsl"
If (xslDoc.parseError.errorCode <> 0) Then
  myErr = xslDoc.parseError
  WScript.Echo "You have error " + myErr.reason
Else
  xslt.stylesheet = xslDoc ' "Set" will also work here
  Set xmlDoc = WScript.CreateObject("Msxml2.DOMDocument.3.0")
  xmlDoc.async = false
  xmlDoc.load "books.xml"
  If (xmlDoc.parseError.errorCode <> 0) Then
    myErr = xmlDoc.parseError
    WScript.Echo "You have error " + myErr.reason
  Else
    Set xslProc = xslt.createProcessor
    xslProc.input = xmlDoc ' "Set" will fail here
    xslProc.addParameter "param1", "Hello"
    xslProc.transform
    WScript.Echo xslProc.output
  End If
End If

> It makes a certain amount of sense to force the user to assign a value
> and not an object, but most other OLE objects seem to allow either and
> simply call the default method themselves if they can't deal with an
> object.
> 
> I don't want to dive into indexed properties here, as it does not
> apply to your situation.

Fine, I can wait till I bump into them.

> I would not bother with this typelib stuff, just always use "by
> reference" assignments everywhere, and only when it fails investigate
> if you are running into a limitation of that objects implementation
> and have to use "by value" assignment explicitly.

Excellent, I'm going to follow that route. Thanks once more!

Michael
_______________________________________________
ActivePerl mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to