Convert a raw pointer to IDispatch

R

Roger That

Hi,

I am trying to use the function "CreateStreamOnHGlobal" from python code
(I need to pass an IStream object to MSXML, like I do in C++ code).

I was able to retrieve a pointer on the IStream object in this way:

from ctypes import *

stream = c_int()
windll.ole32.CreateStreamOnHGlobal(c_long(0), c_long(1), byref(stream))
print "%x"%stream.value

The problem is that I would like to attach this pointer to a python
IDispatch object (in Python only, not using a C++ DLL to do the stuff).
Do you know a way to do it ?

Thanks for your attention.
 
T

Thomas Heller

Roger That said:
Hi,

I am trying to use the function "CreateStreamOnHGlobal" from python
code (I need to pass an IStream object to MSXML, like I do in C++
code).

I was able to retrieve a pointer on the IStream object in this way:

from ctypes import *

stream = c_int()
windll.ole32.CreateStreamOnHGlobal(c_long(0), c_long(1), byref(stream))
print "%x"%stream.value

The problem is that I would like to attach this pointer to a python
IDispatch object (in Python only, not using a C++ DLL to do the
stuff). Do you know a way to do it ?

What do you want to do with this pointer? Pass it to a function called
via ctypes?

Thomas
 
R

Rastafarin

Le Thu, 17 Feb 2005 19:22:16 +0100, Thomas Heller s'est écrié:
What do you want to do with this pointer? Pass it to a function called via
ctypes?

Once it is a IDispatch object (like the IDispatch object returned by
"win32com.client.Dispatch"), I will call the IStream methods on it and
pass it to a DOMDocument of MSXML. It should look like that:

stream = c_int()
windll.ole32.CreateStreamOnHGlobal(c_long(0), c_long(1), byref(stream))
stream_obj = some_conversion(stream)
# IDispatch call
stream_obj.Write("some data", 9)

doc = win32com.client.Dispatch("MSXML2.DOMDocument.4.0")
doc.load(stream_obj)
 
R

Roger That

Le Thu, 17 Feb 2005 19:22:16 +0100, Thomas Heller a écrit :
What do you want to do with this pointer? Pass it to a function called via
ctypes?


Once it is a IDispatch object (like the IDispatch object returned by
"win32com.client.Dispatch"), I will call the IStream methods on it and
pass it to a DOMDocument of MSXML. It should look like that:

stream = c_int()
windll.ole32.CreateStreamOnHGlobal(c_long(0), c_long(1), byref(stream))
stream_obj = some_conversion(stream)
# IDispatch call
stream_obj.Write("some data", 9)

doc = win32com.client.Dispatch("MSXML2.DOMDocument.4.0")
doc.load(stream_obj)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,072
Latest member
trafficcone

Latest Threads

Top