BCB调用动态库返回值使用MFC库的CBitmap类型

atulss 2010-08-12 09:03:10
最近碰到一个难解决的问题。
本个调用一动态库,动态库中一个函数的返回值 是CBitmap MFC类的。
本人想在窗口中显示此类包含的内容。怎么办?
关于使用MFC部分已通过。不会的是怎样能在Image中显示出里面包含的图像。
下面是该类的接口声明。
CBitmap* (GETPREVBITMAP)(HWND hwnd,int nBMPWIDTH,int nBMPHEIGHT);
...全文
166 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
atulss 2010-08-17
  • 打赏
  • 举报
回复
对不起大家了,这两天没有时间上来。
周药师的回答根本就不搭边儿。
毛毛说的办法应该可行,我再试试。这个结贴。
Waiting4you 2010-08-13
  • 打赏
  • 举报
回复
对了,我在VS2008里取得的offBmp为4。
Waiting4you 2010-08-13
  • 打赏
  • 举报
回复
动态库居然返回一个包装类,这种设计~~事件上返回一个HBITMAP就没问题了。
不说了,既然已经遇上了,偶的建议是先打开VC(要和编译这个DLL的VC一样的版本,编译参数也要尽量相同),用offsetof(CBitmap,m_hObject)取得m_hObject成员在CBitmap中的相对位置,如int offBmp = offsetof(CBitmap, m_hObject)。
然后用BCB,声明改成char* (GETPREVBITMAP)(HWND hwnd,int nBMPWIDTH,int nBMPHEIGHT);
取得这个char*指针后偏移offBmp就是HBITMAP了,接下来就好办鸟~~
ccrun.com 2010-08-13
  • 打赏
  • 举报
回复
毛毛的回答才有意义。CBitmap和TBitmap根本就是两个差别巨大的类,直接将CBitmap转换成TBitmap不出错才怪。
周药师 2010-08-12
  • 打赏
  • 举报
回复
我问你 你试了没?
atulss 2010-08-12
  • 打赏
  • 举报
回复
GetPrevbitmap 是动态库中定义的一个接口。我的那段代码是接口申明。
那代码是申请使用接口GetPrevbitmap。
CBitmap是MFC类,TBitmap是VCL类,结构本就不一样,是不能替换的。
周药师 2010-08-12
  • 打赏
  • 举报
回复
还没有到?

你不是已经用了GetPrevbitmap吗?
你new一下
Graphics::TBitmap *GetPrevbitmap =new Graphics::TBitmap();
//your code
atulss 2010-08-12
  • 打赏
  • 举报
回复
动态调用。申请接口就出错了,还没到new的阶段。
周药师 2010-08-12
  • 打赏
  • 举报
回复
new了没?
atulss 2010-08-12
  • 打赏
  • 举报
回复
试过,不行。
动态申请时就出错。
GetPrevbitmap=(GETPREVBITMAP)GetProcAddress(hEzdDLL,_T("GetPrevbitmap"));
if(GetPrevbitmap==NULL)
{
ShowMessage("GETPREVBITMAP Error");
return;
}
周药师 2010-08-12
  • 打赏
  • 举报
回复
用Graphics::TBitmap去试试

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧