Мой проект - это C ++ CLR / CLI, у меня есть несколько изображений PNG в моих файлах ресурсов, и я хочу изменить BackgroundImage для System::Windows::Forms::Button
при нажатии кнопки, мой код ниже:
#include <Windows.h>
#include "resource.h"
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
HBITMAP hBitMap = (HBITMAP) LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_PNG2), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
Bitmap^ bitMap = Bitmap::FromHbitmap((IntPtr) hBitMap);
DeleteObject(hBitMap);
button1->BackgroundImage = (System::Drawing::Image^) bitMap;
}
Вот мой resource.h:
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by Disneyy.rc
//
#define IDB_PNG1 101
#define IDB_PNG2 102
#define IDB_PNG3 103
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 104
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
При компиляции я получаю эту ошибку:
1>MyForm.obj : error LNK2028: unresolved token (0A000036) "extern "C" void * __stdcall LoadImageW(struct HINSTANCE__ *,wchar_t const *,unsigned int,int,int,unsigned int)" (?LoadImageW@@$$J224YGPAXPAUHINSTANCE__@@PB_WIHHI@Z) referenced in function "private: void __clrcall Disneyy::MyForm::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@MyForm@Disneyy@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
1>MyForm.obj : error LNK2028: unresolved token (0A00003F) "extern "C" int __stdcall DeleteObject(void *)" (?DeleteObject@@$$J14YGHPAX@Z) referenced in function "private: void __clrcall Disneyy::MyForm::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@MyForm@Disneyy@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
1>MyForm.obj : error LNK2019: unresolved external symbol "extern "C" void * __stdcall LoadImageW(struct HINSTANCE__ *,wchar_t const *,unsigned int,int,int,unsigned int)" (?LoadImageW@@$$J224YGPAXPAUHINSTANCE__@@PB_WIHHI@Z) referenced in function "private: void __clrcall Disneyy::MyForm::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@MyForm@Disneyy@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
1>MyForm.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall DeleteObject(void *)" (?DeleteObject@@$$J14YGHPAX@Z) referenced in function "private: void __clrcall Disneyy::MyForm::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@MyForm@Disneyy@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
РЕДАКТИРОВАТЬ: Хорошо, я исправил, добавив User32.lib к дополнительным зависимостям, также указав точку входа в качестве основной.Однако что-то не так с этой строкой:
HBITMAP hBitMap = (HBITMAP) LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_PNG2), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
Теперь я получаю эту ошибку:
First-chance exception at 0x77130c3f in Disneyy.exe: 0xC0000005: Access violation reading location 0x00000066.
A first chance exception of type 'System.AccessViolationException' occurred in Disneyy.exe
An unhandled exception of type 'System.AccessViolationException' occurred in Disneyy.exe
Additional information: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
РЕДАКТИРОВАТЬ: Еще разЯ исправил это, изменив IMAGE_BITMAP
на BI_PNG
, но теперь в строке появляется новая ошибка: Bitmap^ bitMap = Bitmap::FromHbitmap((IntPtr) hBitMap);
A first chance exception of type 'System.Runtime.InteropServices.ExternalException' occurred in System.Drawing.dll
An unhandled exception of type 'System.Runtime.InteropServices.ExternalException' occurred in System.Drawing.dll
Additional information: A generic error occurred in GDI+.