【发布时间】:2010-07-19 15:27:45
【问题描述】:
我有一个控件库,已将 .resx 文件添加到 (ImageResources.resx)。它包含两个我随后添加的 .png 图像。
在同一个库中,我有一个控件可以加载几个图像来进行一些自定义绘图,但我似乎无法加载资源:
void GTableLayoutPanel::SetBorderImagesFromManifest(String^ topLeftCornerImageName, String^ topImageName)
{
// Grab the assembly this is being called from
Assembly^ assembly = Assembly::GetExecutingAssembly();
// Grab the images from the assembly
Stream^ stream = assembly->GetManifestResourceStream(topLeftCornerImageName);
Image^ topLeftImage = System::Drawing::Image::FromStream(stream);
stream = assembly->GetManifestResourceStream(topImageName);
Image^ topImage = System::Drawing::Image::FromStream(stream);
// Update the internal store from the supplied images
SetBorderImages(topLeftImage, topImage);
}
...给我报错,抱怨 stream 为 null,这表明我对 GetManifestResourceStream 的调用失败。
图像被称为group_box_top.png 和group_box_top_left.png,我调用图像加载器如下:
SetBorderImagesFromManifest("group_box_top_left.png", "group_box_top.png");
我也试过了:
SetBorderImagesFromManifest("group_box_top_left", "group_box_top");
...因为文件出现在没有 .png 扩展名的 .resx 文件中,但这会产生相同的错误。
我在这里错过了一步吗?
[编辑]我尝试了最后一个链接中的建议,我得到:
MyControlsLib.ImageResources.resources
所以现在我尝试引用:
Stream^ strm1 = assembly->GetManifestResourceStream("MyControlsLib.ImageResources.resources.group_box_top_left");
Stream^ strm2 = assembly->GetManifestResourceStream("MyControlsLib.ImageResources.resources.group_box_top_left.png");
Stream^ strm3 = assembly->GetManifestResourceStream("MyControlsLib.ImageResources.group_box_top_left");
Stream^ strm4 = assembly->GetManifestResourceStream("MyControlsLib.ImageResources.group_box_top_left.png");
...所有这些都返回 nullptr :-/
【问题讨论】:
-
不要尝试我的确切建议 - 我不确定您是否需要 ImageResources 部分,并且可能仍需要包含扩展名。使用关于获取姓名的问题中的代码来获取真实姓名并替换代码中的姓名。另外,我会评论人们的回答,因为我没有收到有关您的问题的任何通知。
-
查看您的答案的评论..
-
嗯,对,那么不确定 - 问题可能是限定名称,但我不确定这如何适用于 C++.NET
标签: .net resources c++-cli manifest resx