环境:win7 32位,vs2010,window appliction dll
//这是MFC DLL中的自己写入的代码用于加载位图 HBITMAP _stdcall GetBitmapFromDll() { HBITMAP bit=LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP1)); if(bit!=NULL) return bit; else { int a=GetLastError(); char buf[100]={0}; sprintf(buf,"%d",a); MessageBoxA(NULL,buf,0,0); return NULL; } }
//这是客户端的调用代码,需要注意的是关于m_pic的picture控件的ID值,要自己转换一下,不能使用默认值 HINSTANCE hInst=::LoadLibraryW(L"D:\\project\\Skin\\Debug\\Skin.dll"); typedef HBITMAP (_stdcall *test)(void); if(NULL==hInst) { MessageBox(L"加载动态链接库失败",0,0); return; } test hehe=NULL; hehe=(test)GetProcAddress(hInst,"GetBitmapFromDll"); if(NULL==hehe) { MessageBox(L"对不起,函数地址获取失败",0,0); return ; } HBITMAP bit=hehe(); m_pic.SetBitmap(bit); FreeLibrary(hInst);这样的返回值是1813只需修改MFC DLL中的代码即可
HBITMAP _stdcall GetBitmapFromDll() { HBITMAP bit=LoadBitmap(GetModuleHandle(L"Skin"/*工程名即可*/),MAKEINTRESOURCE(IDB_BITMAP1)); if(bit!=NULL) return bit; else { int a=GetLastError(); char buf[100]={0}; sprintf(buf,"%d",a); MessageBoxA(NULL,buf,0,0); return NULL; } }
转自:http://blog.csdn.net/dasgk/article/details/9080843