在正常程序中LoadImage 使用没有问题,在动态链接库中为什么加载就有问题呢?
CBitmap bmp1;
BITMAP bm1;
BYTE *pb1;
bm1.bmBits=NULL;
long x_pos;
long y_pos;
BYTE b,g,r;
DWORD dwColor;
RECT tl_rect;
CString str_1;
str_1.Format("d:\\001.bmp");
bm2.bmBits=NULL;
bmp2.m_hObject =::LoadImage(NULL,str_1,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE |LR_LOADFROMFILE) ;
if (bmp2.m_hObject !=0)
{
bmp2.GetBitmap(&bm2);
bm2.bmBits =new byte[bm2.bmWidthBytes *bm2.bmHeight*4];
bmp2.GetBitmapBits(bm2.bmWidthBytes *bm2.bmHeight,bm2.bmBits);
if (bm2.bmBitsPixel !=32)
{
delete bm2.bmBits;
return ;
}
}
17 个解决方案
#1
什么类型的dll,什么错误
#2
::LoadImage 返回值为NULL
#3
输出一个类,类里边的一个成员函数 调动LoadImage 和在程序中调动的结果不一样
#4
路径是否正确?使用绝对路径试试。
#5
就是绝对路径呀
#6
tt=::LoadImage(NULL , bmppath,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE |LR_LOADFROMFILE) ;
if (tt==NULL) //(这里返回值不对)
{
int i=0;
i++;
}
if (tt==NULL) //(这里返回值不对)
{
int i=0;
i++;
}
#7
在exe文件好用,封装成dll出错,我觉得还是dll初始化的问题
#8
dll有什么要初始化的东西吗?关键是其它的MFC的类使用的正常呀
#9
bmp2.m_hObject =::LoadImage(NULL,str_1,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE |LR_LOADFROMFILE) ;
那两个0,0,有问题吧?
HANDLE LoadImage(
HINSTANCE hinst, // handle of the instance containing the image
LPCTSTR lpszName, // name or identifier of image
UINT uType, // type of image
int cxDesired, // desired width
int cyDesired, // desired height
UINT fuLoad // load flags
);
int cxDesired, // desired width
int cyDesired, // desired height
宽和高怎么能设为0呢?
那两个0,0,有问题吧?
HANDLE LoadImage(
HINSTANCE hinst, // handle of the instance containing the image
LPCTSTR lpszName, // name or identifier of image
UINT uType, // type of image
int cxDesired, // desired width
int cyDesired, // desired height
UINT fuLoad // load flags
);
int cxDesired, // desired width
int cyDesired, // desired height
宽和高怎么能设为0呢?
#10
你是规则dll,还是扩展dll,把代码贴出来。
#11
开会,得一个小时
#12
你怎么知道不对呢?是不是DLL中别的问题
#13
1 是扩展DLL。
2 cxDesired
Specifies the width, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function uses the SM_CXICON or SM_CXCURSOR system metric value to set the width. If this parameter is zero and LR_DEFAULTSIZE is not used, the function uses the actual resource width.
cyDesired
Specifies the height, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function uses the SM_CYICON or SM_CYCURSOR system metric value to set the height. If this parameter is zero and LR_DEFAULTSIZE is not used, the function uses the actual resource height.
3 现在测试是在动态链接库中以下语句有问题
HANDLE t_h1;
t_h1=(HANDLE)12345;
在程序中这个值变为了0x00003039 正确
在DLL中这个值没有改变还是 0xcccccccc 这是为什么呢? 为什么0xcccccccc==NULL呢?
HANDLE tt=(HANDLE)12345;
tt=::LoadImage(NULL , bmppath,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE |LR_LOADFROMFILE) ;
if (tt==NULL)
{
int i=0;
i++;
}
2 cxDesired
Specifies the width, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function uses the SM_CXICON or SM_CXCURSOR system metric value to set the width. If this parameter is zero and LR_DEFAULTSIZE is not used, the function uses the actual resource width.
cyDesired
Specifies the height, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function uses the SM_CYICON or SM_CYCURSOR system metric value to set the height. If this parameter is zero and LR_DEFAULTSIZE is not used, the function uses the actual resource height.
3 现在测试是在动态链接库中以下语句有问题
HANDLE t_h1;
t_h1=(HANDLE)12345;
在程序中这个值变为了0x00003039 正确
在DLL中这个值没有改变还是 0xcccccccc 这是为什么呢? 为什么0xcccccccc==NULL呢?
HANDLE tt=(HANDLE)12345;
tt=::LoadImage(NULL , bmppath,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE |LR_LOADFROMFILE) ;
if (tt==NULL)
{
int i=0;
i++;
}
#14
也就是说现在是LoadImage返回值不正常的问题。这个是为什么呢,为什么会这样呢,可能加载进来了但是返回句柄不成功,也可能就没有加载进来。
#15
知道怎么回事了,原来是修改的Dll没有传递给程序编译造成的。呵呵要把编译的DLL放到程序开发的位置,不能只是在引用lib里指定路径。
#16
知道怎么回事了,原来是修改的Dll没有传递给程序编译造成的。呵呵要把编译的DLL放到程序开发的位置,不能只是在引用lib里指定路径。
=======================================
你在工程设置时可以将DLL工程的输出目录改成调用程序的目录,这样不用每改一次DLL就复制一次了,让上面的那么多星星费脑筋.
=======================================
你在工程设置时可以将DLL工程的输出目录改成调用程序的目录,这样不用每改一次DLL就复制一次了,让上面的那么多星星费脑筋.
#17
呵呵,猩猩们都谢谢了
#1
什么类型的dll,什么错误
#2
::LoadImage 返回值为NULL
#3
输出一个类,类里边的一个成员函数 调动LoadImage 和在程序中调动的结果不一样
#4
路径是否正确?使用绝对路径试试。
#5
就是绝对路径呀
#6
tt=::LoadImage(NULL , bmppath,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE |LR_LOADFROMFILE) ;
if (tt==NULL) //(这里返回值不对)
{
int i=0;
i++;
}
if (tt==NULL) //(这里返回值不对)
{
int i=0;
i++;
}
#7
在exe文件好用,封装成dll出错,我觉得还是dll初始化的问题
#8
dll有什么要初始化的东西吗?关键是其它的MFC的类使用的正常呀
#9
bmp2.m_hObject =::LoadImage(NULL,str_1,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE |LR_LOADFROMFILE) ;
那两个0,0,有问题吧?
HANDLE LoadImage(
HINSTANCE hinst, // handle of the instance containing the image
LPCTSTR lpszName, // name or identifier of image
UINT uType, // type of image
int cxDesired, // desired width
int cyDesired, // desired height
UINT fuLoad // load flags
);
int cxDesired, // desired width
int cyDesired, // desired height
宽和高怎么能设为0呢?
那两个0,0,有问题吧?
HANDLE LoadImage(
HINSTANCE hinst, // handle of the instance containing the image
LPCTSTR lpszName, // name or identifier of image
UINT uType, // type of image
int cxDesired, // desired width
int cyDesired, // desired height
UINT fuLoad // load flags
);
int cxDesired, // desired width
int cyDesired, // desired height
宽和高怎么能设为0呢?
#10
你是规则dll,还是扩展dll,把代码贴出来。
#11
开会,得一个小时
#12
你怎么知道不对呢?是不是DLL中别的问题
#13
1 是扩展DLL。
2 cxDesired
Specifies the width, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function uses the SM_CXICON or SM_CXCURSOR system metric value to set the width. If this parameter is zero and LR_DEFAULTSIZE is not used, the function uses the actual resource width.
cyDesired
Specifies the height, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function uses the SM_CYICON or SM_CYCURSOR system metric value to set the height. If this parameter is zero and LR_DEFAULTSIZE is not used, the function uses the actual resource height.
3 现在测试是在动态链接库中以下语句有问题
HANDLE t_h1;
t_h1=(HANDLE)12345;
在程序中这个值变为了0x00003039 正确
在DLL中这个值没有改变还是 0xcccccccc 这是为什么呢? 为什么0xcccccccc==NULL呢?
HANDLE tt=(HANDLE)12345;
tt=::LoadImage(NULL , bmppath,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE |LR_LOADFROMFILE) ;
if (tt==NULL)
{
int i=0;
i++;
}
2 cxDesired
Specifies the width, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function uses the SM_CXICON or SM_CXCURSOR system metric value to set the width. If this parameter is zero and LR_DEFAULTSIZE is not used, the function uses the actual resource width.
cyDesired
Specifies the height, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function uses the SM_CYICON or SM_CYCURSOR system metric value to set the height. If this parameter is zero and LR_DEFAULTSIZE is not used, the function uses the actual resource height.
3 现在测试是在动态链接库中以下语句有问题
HANDLE t_h1;
t_h1=(HANDLE)12345;
在程序中这个值变为了0x00003039 正确
在DLL中这个值没有改变还是 0xcccccccc 这是为什么呢? 为什么0xcccccccc==NULL呢?
HANDLE tt=(HANDLE)12345;
tt=::LoadImage(NULL , bmppath,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE |LR_LOADFROMFILE) ;
if (tt==NULL)
{
int i=0;
i++;
}
#14
也就是说现在是LoadImage返回值不正常的问题。这个是为什么呢,为什么会这样呢,可能加载进来了但是返回句柄不成功,也可能就没有加载进来。
#15
知道怎么回事了,原来是修改的Dll没有传递给程序编译造成的。呵呵要把编译的DLL放到程序开发的位置,不能只是在引用lib里指定路径。
#16
知道怎么回事了,原来是修改的Dll没有传递给程序编译造成的。呵呵要把编译的DLL放到程序开发的位置,不能只是在引用lib里指定路径。
=======================================
你在工程设置时可以将DLL工程的输出目录改成调用程序的目录,这样不用每改一次DLL就复制一次了,让上面的那么多星星费脑筋.
=======================================
你在工程设置时可以将DLL工程的输出目录改成调用程序的目录,这样不用每改一次DLL就复制一次了,让上面的那么多星星费脑筋.
#17
呵呵,猩猩们都谢谢了