Hi, 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@delphi.org.nz Admin: http://delphi.org.nz/mailman/listinfo/delphi Unsubscribe: send an email to delphi-requ...@delphi.org.nz with Subject: unsubscribe