mirror of
https://codeberg.org/ziglang/zig.git
synced 2026-03-08 01:24:49 +01:00
windows_resources standalone test: Load a resource and check its data
Just a potential way to catch regressions and to ensure the resources actually make it into the binary correctly.
This commit is contained in:
parent
29b7214027
commit
1655a666d5
2 changed files with 52 additions and 3 deletions
|
|
@ -46,7 +46,10 @@ fn add(
|
|||
.gnu => .gnu,
|
||||
};
|
||||
|
||||
_ = exe.getEmittedBin();
|
||||
const exe_run_step = b.addRunArtifact(exe);
|
||||
exe_run_step.skip_foreign_checks = true;
|
||||
exe_run_step.expectStdErrEqual("");
|
||||
exe_run_step.expectStdOutEqual("");
|
||||
|
||||
test_step.dependOn(&exe.step);
|
||||
test_step.dependOn(&exe_run_step.step);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,51 @@
|
|||
const std = @import("std");
|
||||
const builtin = @import("builtin");
|
||||
const w = std.os.windows;
|
||||
|
||||
pub fn main() !void {
|
||||
std.debug.print("All your {s} are belong to us.\n", .{"codebase"});
|
||||
if (builtin.os.tag == .windows) {
|
||||
const name = std.unicode.wtf8ToWtf16LeStringLiteral("FOO");
|
||||
const RT_RCDATA = MAKEINTRESOURCEW(10);
|
||||
const handle = FindResourceW(null, name, RT_RCDATA) orelse {
|
||||
std.debug.print("unable to find resource: {t}\n", .{w.GetLastError()});
|
||||
return error.FailedToLoadResource;
|
||||
};
|
||||
const res = LoadResource(null, handle) orelse {
|
||||
std.debug.print("unable to load resource: {t}\n", .{w.GetLastError()});
|
||||
return error.FailedToLoadResource;
|
||||
};
|
||||
const data_ptr = LockResource(res) orelse {
|
||||
std.debug.print("unable to lock resource: {t}\n", .{w.GetLastError()});
|
||||
return error.FailedToLoadResource;
|
||||
};
|
||||
const size = SizeofResource(null, handle);
|
||||
const data = @as([*]const u8, @ptrCast(data_ptr))[0..size];
|
||||
try std.testing.expectEqualSlices(u8, "foo", data);
|
||||
}
|
||||
}
|
||||
|
||||
const HRSRC = *opaque {};
|
||||
const HGLOBAL = *opaque {};
|
||||
fn MAKEINTRESOURCEW(id: u16) [*:0]align(1) const w.WCHAR {
|
||||
return @ptrFromInt(id);
|
||||
}
|
||||
|
||||
extern "kernel32" fn FindResourceW(
|
||||
hModule: ?w.HMODULE,
|
||||
lpName: [*:0]align(1) const w.WCHAR,
|
||||
lpType: [*:0]align(1) const w.WCHAR,
|
||||
) callconv(.winapi) ?HRSRC;
|
||||
|
||||
extern "kernel32" fn LoadResource(
|
||||
hModule: ?w.HMODULE,
|
||||
hResInfo: HRSRC,
|
||||
) callconv(.winapi) ?HGLOBAL;
|
||||
|
||||
extern "kernel32" fn LockResource(
|
||||
hResData: HGLOBAL,
|
||||
) callconv(.winapi) ?w.LPVOID;
|
||||
|
||||
extern "kernel32" fn SizeofResource(
|
||||
hModule: ?w.HMODULE,
|
||||
hResInfo: HRSRC,
|
||||
) callconv(.winapi) w.DWORD;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue