深夜等解答!跪求

Cooki 2012-08-15 12:56:52
具体题目是
这是一公司的面试题学习之用下载研究,但水平低不太懂。C++ , VC++ 的书也看过好几大本了.一般的DLL应用知道 但下面这一行:
bool dll_init(IBox * p_in/*IN*/, IController ** p_out/*OUT*/);

内部怎么实现,跟界面按钮如何关联起来,实在搞不明白!请高手编写个简单的代码,每个按钮只响应一个提示也行,明白了思路后我自己再去仔细研究. (还请大家提供一些参考资料方便学习)

感谢!

测试题:
请编写一个dll,这个dll能与我们提供的exe(初试D.exe)工作,在exe的界面上绘制我们提供的图片test.jpg,并且,能够通过主界面的按钮上下左右的移动界面上的图片。
提示:下面是我们的示例程序运行的效果图,你写的Dll中不需要写上“这是示例程序”那几个红色的文字。
需要的借口在interface.h中有定义。
示例程序是用vs2003编写。
例子图片你可以转化为bmp后再使用。
图片一次移动距离自己定,示例程序用的是5。
注:请提供程序源代码

interface.h文件
#pragma once
interface IController
{
virtual void draw(HWND wnd, RECT & rc) PURE;
virtual void on_btn_up_pressed() PURE;
virtual void on_btn_left_pressed() PURE;
virtual void on_btn_right_pressed() PURE;
virtual void on_btn_down_pressed() PURE;
};

//IBox接口由我们提供的exe实现,在调用你导出函数时,把IBox指针传给你
//你需要实现IController
interface IBox
{
virtual HWND getWND() PURE;
virtual RECT getDrawRect() PURE;
};
//dll提供的导出函数原型
typedef bool (*dll_entry_type)(IBox * p_in/*IN*/, IController ** p_out/*OUT*/) ;
extern "C" __declspec(dllexport) bool dll_init(IBox * p_in/*IN*/, IController ** p_out/*OUT*/);

试题下载地址:www.tigou.net/downloads/cx.rar




在说说我的情况,一切都完成的差不多了,就初始化图片的函数有问题,
情况是这样的
interface IBox
{
virtual HWND getWND() PURE;
virtual RECT getDrawRect() PURE;
};


void Controller::InitControl( IBox * p_in )
{
this->m_pBox = p_in;
HINSTANCE hInstance = hInst;//就是这里如何得到模块实例的句柄,如何通过IBOX传来的信息知道呢???
m_Bitmap = LoadBitmap(hInstance, (LPCWSTR)IDB_BITMAP);
//还有这里是通过文件名来加载图片吗?比如LoadBitmap(hInstance, (LPCWSTR)IDB_BITMAP1);
//图片资源已经加载进去,但是'IDB_BITMAP1' : undeclared identifier
//哪里有什么问题求大神指导,感激不尽啊!!
m_Sizecx = 0;
m_Sizecy = 0;
}
...全文
205 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cooki 2012-08-15
  • 打赏
  • 举报
回复
谢谢哦,新手初次发帖,有很多不懂,就是这个接口的问题,DLL中获得EXE通过接口传来的一些句柄
meiguakee 2012-08-15
  • 打赏
  • 举报
回复
我不是来回答问题的,我只是来提醒一句楼主提问问题请把问题概括写在题目里,你这种“深夜求解答”或者好多人“求高手,急急急!!!”“程序有问题求半忙” “我的程序崩溃了谁能告诉我”之类的帖子,好多有脾气的人压根不会进来看。
Gloveing 2012-08-15
  • 打赏
  • 举报
回复
'IDB_BITMAP1' : undeclared identifier
应该是你没有包含定义了是'IDB_BITMAP1' 的头文件
Cooki 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 7 楼 的回复:

引用 1 楼 的回复:
'IDB_BITMAP1' : undeclared identifier
应该是你没有包含定义了是'IDB_BITMAP1' 的头文件



'IDB_BITMAP1' : undeclared identifier
应该是你没有包含定义了是'IDB_BITMAP1' 的头文件
还要包含定义了是'IDB_BITMAP1' 的头……
[/Quote]


还真是,谢谢了。 现在就差这个调出函数还没写好了
bool dll_init(IBox * p_in, IController ** p_out)
{
// Controller ct;

*p_out=new Controller;
return true;
}
Eleven 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 1 楼 的回复:
'IDB_BITMAP1' : undeclared identifier
应该是你没有包含定义了是'IDB_BITMAP1' 的头文件



'IDB_BITMAP1' : undeclared identifier
应该是你没有包含定义了是'IDB_BITMAP1' 的头文件
还要包含定义了是'IDB_BITMAP1' 的头文件
,怎么弄呢?
[/Quote]
没有#include "resource.h" ??这个吗?
Cooki 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
'IDB_BITMAP1' : undeclared identifier
应该是你没有包含定义了是'IDB_BITMAP1' 的头文件
[/Quote]


'IDB_BITMAP1' : undeclared identifier
应该是你没有包含定义了是'IDB_BITMAP1' 的头文件
还要包含定义了是'IDB_BITMAP1' 的头文件
,怎么弄呢?
Cooki 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
总体问题我真的没看啊。我就说说这两个地方我的理解。
HINSTANCE hInstance = hInst;//就是这里如何得到模块实例的句柄,如何通过IBOX传来的信息知道呢???

这个我也没看懂要在哪里用。总之在dll里面的话,dllmain函数的参数中有一个就是dll的句柄。mfc程序也可以用AfxGetInstanceHandle获取,在dll中获取的就是dll句柄,exe中使用获……
[/Quote]

void Controller::InitControl( IBox * p_in )
{
this->m_pBox = p_in;
HINSTANCE hInstance =AfxGetInstanceHandle();
m_Bitmap = LoadBitmap(hInstance, (LPCWSTR)IDB_BITMAP1);
m_Sizecx = 0;
m_Sizecy = 0;
} 这个hInstance已经没问题,这个位图我还是不知道怎么弄啊
,唯一的错误就是这个了
error C2065: 'IDB_BITMAP1' : undeclared identifier
error C2664: 'LoadBitmapA' : cannot convert parameter 2 from 'const unsigned short *' to 'const char *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
执行 cl.exe 时出错.
Creating browse info file...

New.dll - 1 error(s), 0 warning(s)
meiguakee 2012-08-15
  • 打赏
  • 举报
回复
纠正一下最后一句话,(LPCWSTR)IDB_BITMAP似乎应该写成MAKEINTRESOURCE(IDB_BITMAP)。。。。。浏览器双击选择的内容跟编译器果断有点区别。。。。。
meiguakee 2012-08-15
  • 打赏
  • 举报
回复
总体问题我真的没看啊。我就说说这两个地方我的理解。
HINSTANCE hInstance = hInst;//就是这里如何得到模块实例的句柄,如何通过IBOX传来的信息知道呢???

这个我也没看懂要在哪里用。总之在dll里面的话,dllmain函数的参数中有一个就是dll的句柄。mfc程序也可以用AfxGetInstanceHandle获取,在dll中获取的就是dll句柄,exe中使用获取exe句柄。在应用程序通过loadlibrary可以获取dll句柄,另外还有一个函数GetModuleHandle你去看看。。。

m_Bitmap = LoadBitmap(hInstance, (LPCWSTR)IDB_BITMAP);
//还有这里是通过文件名来加载图片吗?比如LoadBitmap(hInstance, (LPCWSTR)IDB_BITMAP1);

这个函数,(LPCWSTR)IDB_BITMAP似乎应该写成MAKEINTRESOURCE(BITMAP)


我也是菜鸟,就能说这些了。。。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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