วันเสาร์ที่ 31 มีนาคม พ.ศ. 2561

C++ clr ไม่เห็น Bitmap resource ระหว่าง run

C++ Manage clr ในกรณีที่ Compile เป็น DLL ในบางครั้ง จะดึง Resource ที่ จะแสดง Image มาผิดชื่อ (งงๆอยู่ว่าทำไม) วิธี Fix ให้ระบุชื่อ Resource .resx โดยตรงเลย


Reflection::Assembly^ pxAssembly = Reflection::Assembly::GetExecutingAssembly();
String^ pxResName = pxAssembly->GetName()->Name + ".MyForm"; //Note: add your resourcefile name here, i.e. ".MyResourceFile" a it appears in solution explorer, without it's extension

Resources::ResourceManager^  resources = (gcnew Resources::ResourceManager(pxResName, pxAssembly));
this->button1->BackgroundImage = (cli::safe_cast<Drawing::Bitmap^>(resources->GetObject("PE1")));
เช่น Bitmap อยู่ใน Myform และ Resource ชื่อ Myform.resx ก็ให้ใส่ ชื่อลงไปเลยทดแทนที่ โปรแกรม Gen ให้

กรณีต้องการ จาก File โดยตรง
(cli::safe_cast<System::Drawing::Image^>(System::Drawing::Image::FromFile(L"c:/pestimate/ac-scale.bmp")));

หรือ


Resources::ResourceManager^  resources = (gcnew Resources::ResourceManager(this->GetType()->Assembly->GetName()->Name+ "."+ this->GetType()->Name, this->GetType()->Assembly));

ใช้ ComponentResourceManager
วิธีที่ถูกให้จดว่า เวลา Errror จะบอก ว่า Resource ที่ขาดไปชื่ออะไร แล้วไปแก้ใน
Logical name ของ .resx โดยกดที่ Mouse ขวา Property->Managed Resources->General และ แก้ที่ Logical name
<namespace>.<file>.resources ตามที่ Errorบอก





ไม่มีความคิดเห็น:

แสดงความคิดเห็น