
我想在我的应用程序的项目中使用它,但是只要组件被创建,我就会得到以下异常:
First chance exception at 79B9BC. Exception class EResNotFound with message 'Resource xxx not found'. Process yyy.exe (6060)
我在这里错过了什么?
编辑
包项目中资源的调用代码如下:
Png.LoadFromresourcename(HInstance,'png_resource_name');
编辑2
正如DavID所建议的,我尝试使用函数GetModuleHandle,但是如果我从包的项目或应用程序的项目中调用它,它将始终返回0.在包的项目中调用的代码是这样的:
PackageModuleHandle := GetModuleHandle(PChar('my_package.bpl'));Png := TPngImage.Create;Png .LoadFromresourcename(PackageModuleHandle,'png_resource_name'); bpl文件的绝对路径也不起作用.
编辑3
基于新答案的新尝试:
PackageModuleHandle := FindClassHInstance(TMyComponent);Png := TPngImage.Create;Png .LoadFromresourcename(PackageModuleHandle,'png_resource_name');
失败也有同样的例外.
编辑4
使用ResourceHacker,如果我正确使用它,资源似乎不在我的bpl文件中.我能做些什么呢?这么简单的功能似乎有这么复杂的问题.
结论
我必须在{$R * .res}行之后将我的包的.res文件添加到包的.dpr中.像这样:
{$R *.res}{$R 'my_pacakge.res'} 此外,我必须将my_package.rc文件包含到我的项目中,因此在每次构建之后,资源将被编译到.res.我想这就是诀窍.感谢所有的答案.
@H_502_4@解决方法 您需要使用FindClassHInstance(),指定组件的类类型,而不是使用全局HInstance变量或GetModuleHandle().这样,无论包是静态链接还是动态链接到主可执行文件,您都可以获得正确的模块句柄.@H_502_4@ @H_502_4@ @H_502_4@ @H_502_68@@H_502_4@ 总结以上是内存溢出为你收集整理的如何在Delphi中添加和使用自定义包/组件中的资源?全部内容,希望文章能够帮你解决如何在Delphi中添加和使用自定义包/组件中的资源?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)