feature. See also
. The project being documented here (as the example) is the Zig library itself.
Threaded.Dl
const Dl = switch (native_os)
File
Code
const Dl = switch (native_os) {
.windows => struct {
iphlpapi_dll: std.atomic.Value(?*anyopaque),
ConvertInterfaceNameToLuidW: std.atomic.Value(?*const fn (
InterfaceName: [*:0]const windows.WCHAR,
InterfaceLuid: *windows.NET.LUID,
) callconv(.winapi) windows.Win32Error),
ConvertInterfaceLuidToIndex: std.atomic.Value(?*const fn (
InterfaceLuid: *const windows.NET.LUID,
InterfaceIndex: *windows.NET.IFINDEX,
) callconv(.winapi) windows.Win32Error),
ConvertInterfaceIndexToLuid: std.atomic.Value(?*const fn (
InterfaceIndex: std.os.windows.NET.IFINDEX,
InterfaceLuid: *std.os.windows.NET.LUID,
) callconv(.winapi) windows.Win32Error),
ConvertInterfaceLuidToNameW: std.atomic.Value(?*const fn (
InterfaceLuid: *const std.os.windows.NET.LUID,
InterfaceName: std.os.windows.PWSTR,
Length: std.os.windows.SIZE_T,
) callconv(.winapi) std.os.windows.Win32Error),
dnsapi_dll: std.atomic.Value(?*anyopaque),
DnsQueryEx: std.atomic.Value(?*const fn (
pQueryRequest: *const windows.DNS.QUERY.REQUEST,
pQueryResults: *windows.DNS.QUERY.RESULT,
pCancelHandle: ?*windows.DNS.QUERY.CANCEL,
) callconv(.winapi) windows.DNS.STATUS),
// pCancelHandle: *const windows.DNS.QUERY.CANCEL,
//) callconv(.winapi) windows.DNS.STATUS),
DnsFree: std.atomic.Value(?*const fn (
pRecordList: ?*anyopaque,
FreeType: windows.DNS.FREE_TYPE,
) callconv(.winapi) void),
const init: Dl = .{
.iphlpapi_dll = .init(null),
.ConvertInterfaceNameToLuidW = .init(null),
.ConvertInterfaceLuidToIndex = .init(null),
.ConvertInterfaceIndexToLuid = .init(null),
.ConvertInterfaceLuidToNameW = .init(null),
.dnsapi_dll = .init(null),
.DnsQueryEx = .init(null),
.DnsFree = .init(null),
};
fn deinit(dl: *Dl) void {
if (dl.iphlpapi_dll.raw) |iphlpapi_dll| switch (windows.ntdll.LdrUnloadDll(iphlpapi_dll)) {
.SUCCESS => {},
else => |status| windows.unexpectedStatus(status) catch {},
};
dl.* = .init;
}
},
else => struct {
const init: Dl = .{};
fn deinit(_: Dl) void {}
},
}