[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