[DUG] Translating WinAPI C++ header - any suggestions?

Todd Martin todd.martin.nz at gmail.com
Wed Jun 17 17:46:50 NZST 2009


Hi Conor

Check out this link
http://rvelthuis.de/articles/articles-convert.html

Have you considered using h2pas in Free Pascal?
or
SWIG for Delphi
http://www.wmhelp.com/download/swig-delphi.rar

Todd.

> I'm needing to call a Windows API function introduced in Vista from my
> Delphi app, but I don't have any Delphi headers which describe the
> function.
> 
> Related functions are already documented in the JEDI Windows API
> library, but not this function.
> 
> My C++ is almost non-existent, and I'm struggling to work out the Delphi
> definitions that correspond to the function and it's parameter as
> documented on MSDN.
> 
>>From http://msdn.microsoft.com/en-us/library/aa814417.aspx
> 
> NETIOAPI_API GetIpInterfaceEntry(
>   __inout  PMIB_IPINTERFACE_ROW Row
> );
> 
> typedef struct _MIB_IPINTERFACE_ROW {
>   ADDRESS_FAMILY                 Family;
>   NET_LUID                       InterfaceLuid;
>   NET_IFINDEX                    InterfaceIndex;
>   ULONG                          MaxReassemblySize;
>   ULONG64                        InterfaceIdentifier;
>   ULONG                          MinRouterAdvertisementInterval;
>   ULONG                          MaxRouterAdvertisementInterval;
>   BOOLEAN                        AdvertisingEnabled;
>   BOOLEAN                        ForwardingEnabled;
>   BOOLEAN                        WeakHostSend;
>   BOOLEAN                        WeakHostReceive;
>   BOOLEAN                        UseAutomaticMetric;
>   BOOLEAN                        UseNeighborUnreachabilityDetection;
>   BOOLEAN                        ManagedAddressConfigurationSupported;
>   BOOLEAN                        OtherStatefulConfigurationSupported;
>   BOOLEAN                        AdvertiseDefaultRoute;
>   NL_ROUTER_DISCOVERY_BEHAVIOR   RouterDiscoveryBehavior;
>   ULONG                          DadTransmits;
>   ULONG                          BaseReachableTime;
>   ULONG                          RetransmitTime;
>   ULONG                          PathMtuDiscoveryTimeout;
>   NL_LINK_LOCAL_ADDRESS_BEHAVIOR LinkLocalAddressBehavior;
>   ULONG                          LinkLocalAddressTimeout;
>   ULONG                          ZoneIndices[ScopeLevelCount];
>   ULONG                          SitePrefixLength;
>   ULONG                          Metric;
>   ULONG                          NlMtu;
>   BOOLEAN                        Connected;
>   BOOLEAN                        SupportsWakeUpPatterns;
>   BOOLEAN                        SupportsNeighborDiscovery;
>   BOOLEAN                        SupportsRouterDiscovery;
>   ULONG                          ReachableTime;
>   NL_INTERFACE_OFFLOAD_ROD       TransmitOffload;
>   NL_INTERFACE_OFFLOAD_ROD       ReceiveOffload;
>   BOOLEAN                        DisableDefaultRoutes;
> }MIB_IPINTERFACE_ROW, *PMIB_IPINTERFACE_ROW;
> 
> Among other bits, the bit I'm struggling with at the minute is the
> ZoneIndices[ScopeLevelCount] field; I can't work out what size the array
> is supposed to be.
> 
> This is what I've defined so far, although I haven't worked out the
> enums in the original C++ definition yet.  I'll be explicitly loading
> the Windows DLL on Vista and getting the address of the new function to
> call.
> 
>   PMIB_IPINTERFACE_ROW = ^MIB_IPINTERFACE_ROW;
>   {$EXTERNALSYM PMIB_IPINTERFACE_ROW}
>   _MIB_IPINTERFACE_ROW = record
>     Family: ADDRESS_FAMILY;
>     InterfaceLuid: NET_LUID;
>     InterfaceIndex: NET_IFINDEX;
>     MaxReassemblySize,
>     InterfaceIdentifier,
>     MinRouterAdvertisementInterval,
>     MaxRouterAdvertisementInterval: Cardinal;
>     AdvertisingEnabled,
>     ForwardingEnabled,
>     WeakHostSend,
>     WeakHostReceive,
>     UseAutomaticMetric,
>     UseNeighborUnreachabilityDetection,
>     ManagedAddressConfigurationSupported,
>     OtherStatefulConfigurationSupported,
>     AdvertiseDefaultRoute: LongBool;
>     RouterDiscoveryBehavior: NL_ROUTER_DISCOVERY_BEHAVIOR;
>     DadTransmits,
>     BaseReachableTime,
>     RetransmitTime,
>     PathMtuDiscoveryTimeout: Cardinal;
>     LinkLocalAddressBehavior: NL_LINK_LOCAL_ADDRESS_BEHAVIOR;
>     LinkLocalAddressTimeout,
>     ZoneIndices[ScopeLevelCount],
>     SitePrefixLength,
>     Metric,
>     NlMtu: Cardinal;
>     Connected,
>     SupportsWakeUpPatterns,
>     SupportsNeighborDiscovery,
>     SupportsRouterDiscovery: LongBool;
>     ReachableTime: Cardinal;
>     TransmitOffload: NL_INTERFACE_OFFLOAD_ROD;
>     ReceiveOffload: NL_INTERFACE_OFFLOAD_ROD;
>     DisableDefaultRoutes: LongBool;
>   end;
>   {$EXTERNALSYM _MIB_IPINTERFACE_ROW}
>   MIB_IPINTERFACE_ROW = _MIB_IPINTERFACE_ROW;
>   {$EXTERNALSYM MIB_IPINTERFACE_ROW}
>   TMibIpInterfaceRow = MIB_IPINTERFACE_ROW;
>   PMibIpInterfaceRow = PMIB_IPINTERFACE_ROW;
> 
> const
>   iphlpapilib = 'iphlpapi.dll';
> 
> var
>   HIpHlpApi: THandle = 0;
>   GetIpInterfaceEntry: function(const pArpEntry: MIB_IPINTERFACE_ROW):
> LongInt; stdcall;
>   {$EXTERNALSYM GetIpInterfaceEntry}
> 
> Does anybody out there have suggestions or tips/tricks for translating a
> function definition like this?
> 
> Many thanks,
> 
> Conor
> 
> 
> _______________________________________________
> NZ Borland Developers Group - Delphi mailing list
> Post: delphi at delphi.org.nz
> Admin: http://delphi.org.nz/mailman/listinfo/delphi
> Unsubscribe: send an email to delphi-request at delphi.org.nz with Subject: unsubscribe
> 



More information about the Delphi mailing list