这是一公司的面试题学习之用下载研究,但水平低不太懂。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
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
解决方案 »
- CButtonST按钮中插入图片的疑问,求帮助
- rgb转hsv算法,哪位能详细说下这几步的意思?
- 散分
- windbg不能进行本地内核调试
- 为什么msdn上查不到MATH.H里的 acosf sinf这些函数
- 急,在线:DLL中的函数调用问题!
- Visual C++ 8.0 编译器 for x86_64下载,要的进来。
- 哪有能在98下使用的pskill.exe程序,多谢
- 应该怎样给DX90SDK\Samples\C++\DirectShow\Capture\AMCap加上一个抓图的功能
- Qgis二次开发 怎么加载离线地图
- QueryPerformanceFrequency()和QueryPerformanceCounter()到底有什么不同?
- 8086的计时器8255的能力很低,那么高精度的计时,VC的api是通过什么实现的?
2.dll_init中生产一个IController派生类
3.dll_init就是产生一个类指针,给主界面调用相关函数实现功能;扩展DLL?是题目制定?
虽然他不属于com(没有实现iunknown接口),但是同样是对接口的操作,即对一组函数指针的操作。兄弟,这道题目对于不了解com的人来说(如果仅对c++水平足够高的话也可以没学过com,因为有本书上说com是更好的c++,你懂的),确实不好做。如果了解com的话,这题太简单了,如果对c++有较深的理解的话,即便是不知道com。自己稍微思考下也可以解决的。
{
*p_out=new Cx;
return true;
}
class Cx : public IController
{
public:
Cx();
virtual ~Cx();
public:
void draw(HWND wnd, RECT & rc) ;
void on_btn_up_pressed() ;
void on_btn_left_pressed() ;
void on_btn_right_pressed() ;
void on_btn_down_pressed() ;};
void Cx::draw(HWND wnd, RECT & rc)
{
return;
}
void Cx::on_btn_up_pressed()
{
MessageBox(0,"up",0,0);
}
void Cx::on_btn_left_pressed()
{
MessageBox(0,"left",0,0);
}
void Cx::on_btn_right_pressed()
{
MessageBox(0,"right",0,0);
}
void Cx::on_btn_down_pressed()
{
MessageBox(0,"down",0,0);
}