Matt Herbert schrieb:
> Hello,
> 
> <long_winded_explanation>
> 
> So I've spent the last couple of days trying to figure out how I can 
> change the bindings on a network adapter. All of my research has lead me 
> to the INetCfg interface 
> (http://msdn2.microsoft.com/en-us/library/ms805265.aspx). It seems as 
> though nobody out there has actually used this interface with python yet 
> (or at least I can't find anything with google).

I think there should be other ways to change the bindings of a network adapter,
although I cannot tell which you should use.  Try asking on the python-win32 
mailing
list, maybe?

If you indeed want to use the INetCfg interface, see below.
 
> So according to the MSDN docs, the interface is already implemented in 
> netcfgx.dll. So I thought I would just use ctypes, and access it that 
> way. But I took a look at the netcfgx.h file and got scared. I'm not a 
> very competent C/C++ programmer (only dable here and there) and that 
> header file has things I don't understand.
> 
> Next I realized that INetCfg is a COM interface (I don't understand COM 
> that well either). So I dug through google, and found the CLSID for it, 
> and the IID for INetCfg class, and tried to CoCreateInstance() it (as I 
> saw in several C/C++ examples). I kept getting an error about there 
> being no interface object registered that supports this IID. So I 
> re-read chapter 12 of Mark Hammond's Book and found this gem:
> 
> "A final note on native interfaces: Python can't support arbitrary COM 
> interfaces; the pythoncom module (or a pythoncom extension) must have 
> built-in support for the interface. Fortunately, there are tools 
> pythoncom developers use that largely automate the process of supporting 
> new interfaces."
> 
> Ok, clearly pythoncom has no built-in support for this interface. Dooh. 
> So I spend a day digging through google and reading anything I can find. 
> Finally I found a couple of threads somewhere that talk about comtypes. 
> So I am trying to generate a python class that "wraps" the INetCfg 
> interface using comtypes.
> 
> I found the comtypes pages on the ctypes wiki, and read through that 
> (several times). It suggests the easiest thing to do is generate a type 
> library from the IDL, and use comtypes.client.GetModule() to create the 
> interface automatically. Sweet. So I try to compile the IDL into a TLB 
> using MIDL. oops, can't be done because the IDL does not contain any 
> "library" declarations. Ugggh.
> 
> </long_winded_explanation>

All this seems basically correct.

Actually, it is quite simple to create a type library from the NetCFGX.idl file,
you just have to write a library statement yourself.  I was able to create a 
typelib
by compiling this file with the midl compiler:

"""
import "netcfgx.idl";

[
        uuid(d99085ff-c5d7-4a4c-a987-91a513e268a9),
        version(1.0),
        helpstring("NetCfgX 1.0 Type Library")
]
library NetCFGLib
{
        interface IEnumNetCfgBindingInterface;
        interface IEnumNetCfgBindingPath;
        interface IEnumNetCfgComponent;
        interface INetCfg;
        interface INetCfgProperties;
        interface INetCfgLock;
        interface INetCfgBindingInterface;
        interface INetCfgBindingPath;
        interface INetCfgComponentBindings;
        interface INetCfgBindingPath;
        interface INetCfgClass;
        interface INetCfgComponent;
        interface INetCfgIdentification;
        interface INetCfgClassSetup;
};
"""

The 'interface ...' lines are copied and pasted from the netcfgx.idl file,
the guid in uuid(...) I did create myself.

Thomas


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
comtypes-users mailing list
comtypes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/comtypes-users

Reply via email to