Sorry for so many posting here, but on the off chance someone is curious and looks in to this:<br><br>There's two issues I've found so far:<br><br><br><div class="gmail_quote">On Fri, Mar 14, 2008 at 2:44 PM, Kevin Patterson <<a href="mailto:patter001@gmail.com">patter001@gmail.com</a>> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Does anyone have a working example (excel, outlook, etc...) to try the win32com.client.Record function on ?<br>
<br>I tried the pythoncom test harness also, but no luck:<br><br>import win32com.client<br>myarray = win32com.client.DispatchEx("{F1A51873-24E9-47ED-AE71-925462C5FE3B}")<br>
myrecord = win32com.client.Record("tagTestStruct1",myarray)<br><br>the Record Creation fails with the following exception:<br><br>Traceback (most recent call last):<br> File "<stdin>", line 1, in <module><br>
File "C:\Python25\lib\site-packages\win32com\client\__init__.py", line 405, in<br> Record<br> return pythoncom.GetRecordFromGuids(module.CLSID, module.MajorVersion, modul<br>e.MinorVersion, module.LCID, struct_guid)<br>
pywintypes.com_error: (-2147024809, 'The parameter is incorrect.', None, None)<br><br>For refrence, help looks like the below. Only major difference is using Dispatch vs. DispatchEx<br><br>Record(name, object)<br>
Creates a new record object, given the name of the record,<br> and an object from the same type library.<br><br><br>Example usage from documentation is:<br><br> app = win32com.client.Dispatch("Some.Application")<br>
point = win32com.client.Record("SomeAppPoint", app)<br> point.x = 0<br> point.y = 0<br> app.MoveTo(point)<div><div></div><div class="Wj3C7c"><br><br><br><div class="gmail_quote">On Thu, Mar 13, 2008 at 11:02 PM, Kevin Patterson <<a href="mailto:patter001@gmail.com" target="_blank">patter001@gmail.com</a>> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Ok, more digging, it looks like the OLE Automation TypeLib should have a GUID Record defined. I see this when using the Python Object Browser<br>
<br>However, when I generate the py file for the OLE Automation type library, I don't see GUID in the RecordMap (or any reference to the GUID Record)...Is there suppose to be something in the generated file, but maybe its not working ? How do I actually create one of these Records ?<div>
<div></div><div><br>
<br><div class="gmail_quote">On Tue, Mar 11, 2008 at 10:04 PM, Kevin Patterson <<a href="mailto:patter001@gmail.com" target="_blank">patter001@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I found the comtypes equivalent if that helps any. The generated comtypes file looks like this:<br><br> COMMETHOD([dispid(1610743812), helpstring(u'GetInterface() method')], HRESULT, 'GetInterface',<br>
( ['in'], POINTER(GUID), 'riid' ),<br>
( ['retval', 'out'], POINTER(POINTER(IUnknown)), 'ppUnknown' )),<br><br>With the above, I'm able to use the comtypes.GUID.GUID structure to pass the information over through the COM. Unfortunately I still can't find the win32com equivalent of passing my structure through the COM.<br>
<br>The win32com generated py file is saying that it expects a VT_RECORD, but from above, maybe it should really be expecting a POINTER ? or VT_POINTER ? I tried to modify the win32com generated file to take a VT_PTR but that didn't seem to help. I really don't want to redo my infastructure in comtypes, so if anyone knows the win32com equivalent, that would be awesome.<br>
<br>In the meantime, I'll keep digging, and will post if I find more.<div><div></div><div><br><br><br><div class="gmail_quote">On Tue, Mar 11, 2008 at 12:58 PM, Kevin Patterson <<a href="mailto:patter001@gmail.com" target="_blank">patter001@gmail.com</a>> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Old thread, but I got a little more data on the function. The function actually has a REFIID as the first parameter. This apparently is a standard structure for C COM code. I'm not entirely sure why the win32com changes the REFIID to be a VT_RECORD. Does the following definition of the functions help at all (they are from the IDL file)<br>
<br><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; color: navy; font-family: Arial;">HRESULT GetInterface(
[in] REFIID riid, [out, retval, iid_is(riid)] IUnknown**
ppUnknown);<br>should be same as:<br></span></font><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; color: navy; font-family: Arial;">HRESULT GetInterface(
[in] GUID* pGuid, [out, retval, iid_is(pGuid)] IUnknown**
ppUnknown);</span></font><div><div></div><div><br><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; color: navy; font-family: Arial;"><br></span></font><br><div class="gmail_quote">On Mon, Feb 4, 2008 at 6:44 PM, Mark Hammond <<a href="mailto:mhammond@skippinet.com.au" target="_blank">mhammond@skippinet.com.au</a>> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div>> guid = win32com.client.Record("GUID", some_ob)<br>
<br>
> I don't have the some_obj that allows me to build "GUID".<br>
<br>
</div>It should be any object from the same typelib - almost certainly whatever<br>
object you intend passing this record to.<br>
<div><br>
> <a href="http://VB.NET" target="_blank">VB.NET</a> (GetType) and C++ (__uuid) both already know that a GUID is a<br>
record.<br>
<br>
</div>C++ doesn't know it is a COM record. A COM record is something quite<br>
different to a C/C++ struct or from .NET types. A COM record is<br>
specifically designed to be cross-language.<br>
<div><br>
> It seems the python CLSID is the same thing, but i don't know what to call<br>
<br>
> to get a CLSID that is a com_record type.<br>
<br>
</div>As I've explained, we are looking for the COM record definition you are<br>
trying to use. A C++ struct definition for a GUID is *not* what you are<br>
looking for - you are looking for the COM record definition of a GUID. I<br>
see now that you simply copied me a C++ struct you found, which is not at<br>
all useful in this context.<br>
<br>
To clarify: in a *typelib* you will find a struct definition that you are<br>
trying to use. Finding a struct definition of the same name somewhere else<br>
is not suitable.<br>
<div><br>
> Am I understanding the win32com.client.Record call correctly? It needs<br>
GUID to be defined by the<br>
> COM right?<br>
<br>
</div>Not "defined by COM", but "defined using COM" - the author of a typelib must<br>
have defined it somewhere.<br>
<div><br>
> Its odd b/c the GIUD (python's CLSID) is all over the COM definitions its<br>
just type<br>
> VT_RECORD type that I'm not understanding how to convert to.<br>
<br>
</div>Yes, I'm afraid you are confused. All existing GUID or CLSID definitions<br>
you can find are useless - there is only 1 that is relevant, and that will<br>
be defined in a typelib.<br>
<br>
I think the confusion is such that you need to find basic docs for the<br>
object, so we can get back to square 1.<br>
<font color="#888888"><br>
Mark<br>
<br>
</font></blockquote></div><br>
</div></div></blockquote></div><br>
</div></div></blockquote></div><br>
</div></div></blockquote></div><br>
</div></div></blockquote></div><br>