刚进公司没两天,这两天培训根据主程序写个DLL,功能大概是这样的,在主程序里面调用,然后弹出个界面,在界面里设置参数的值,然后主程序处理相应的参数,然后把得到的结果显示出来。我就学过C++,以及一些windows界面开发方面的知识,这确实是为难我啊!
没办法硬着头皮上吧...
公司的这款软件已经开发了7年,经过无数人的努力已经到了今天这个地步,可以说主程序是相当的复杂,前两天是大概了解了下这款软件的功能和界面,今天开始从代码剖析。
怎么写DLL公司自己有一个技术文档照着套可以写出来,但这没什么用,你就算套出来了里面什么也不懂,就不能做出改变,不能开发出新的功能,没法子必须一个一个文件的研究
写一个DLL真正有用的不到10个类,而且这些类都早已经编好了。
我现在的情况是:不知道如何下手,其他的就不谈了吧
没办法硬着头皮上吧...
公司的这款软件已经开发了7年,经过无数人的努力已经到了今天这个地步,可以说主程序是相当的复杂,前两天是大概了解了下这款软件的功能和界面,今天开始从代码剖析。
怎么写DLL公司自己有一个技术文档照着套可以写出来,但这没什么用,你就算套出来了里面什么也不懂,就不能做出改变,不能开发出新的功能,没法子必须一个一个文件的研究
写一个DLL真正有用的不到10个类,而且这些类都早已经编好了。
我现在的情况是:不知道如何下手,其他的就不谈了吧
解决方案 »
- SQLite3的API怎么知道执行结果的行数?难不成要一个一个sqlite3_step计算?
- I请问哪里有基于IOCP的开源工程?
- 为什么不能在dll中装载opengl?
- CAsyncSocket怎么建立套接字和绑定套自己指定的一个IP和端口?Create后它调用Bind了,怎么办?我自己的IP地址和端口怎么样绑呢?
- 如果采用静态调用,直接更改Dll名称后,而不是重新编译,如何还能用静态调用的方式使用?
- 在对话框上作图,如何在重绘之前擦除上一次的图?
- 一个困扰了我很久的问题(关于音频文件的播放)
- 双击
- 新手问题:怎样在窗口客户区绘制一个宽6格(正方形)X 高8格的网格,急用!多谢!
- 有什么方法 可以知道以下3种路径是同一路径不?
- vc++ MFC文件对话框
- 今天两件事比较开心
导出函数用可以用dllexport声明
比如
BOOL __declspec(dllexport) __stdcall func(void)
{
//
}
{
BOOL ReadWriteActive;
BOOL AddressLeftShift;
BOOL NackDontCare;
int ReadLevel;
int AckLevel;
int AddressBitCount;
int DataBitCount;
int SdaNameIndex;
int SclNameIndex;
COLORREF clrStart;
COLORREF clrData;
COLORREF clrRead;
COLORREF clrWrite;
COLORREF clrAck;
COLORREF clrEnd;
TCHAR AddressName[50];
TCHAR DataName[50];
TCHAR BusName[50]; //reserve var
COLORREF m_clrSpecBuscolor1; //Address
COLORREF m_clrSpecBuscolor2; //NAck
COLORREF m_clrSpecBuscolor3; //Data Ack
COLORREF m_clrSpecBuscolor4; //data NACK
COLORREF m_clrSpecBuscolor5; //REG ADDR
COLORREF m_clrSpecBuscolor6;
BOOL m_bSpecflag1;
BOOL m_bSpecflag2;
BOOL m_bSpecflag3;
BOOL m_bSpecflag4;
BOOL m_bSpecflag5;
BOOL m_bSpecflag6;
BOOL m_bSpecflag7;
BOOL m_bSpecflag8;//REGADDR check
unsigned int m_nSpecNumber1;
unsigned int m_nSpecNumber2;
unsigned int m_nSpecNumber3;
unsigned int m_nSpecNumber4;
unsigned int m_nSpecNumber5;
unsigned int m_nSpecNumber6;
unsigned int m_nSpecNumber7;
unsigned int m_nSpecNumber8;//REGADDR bit
double m_dSpaceNumber1;
double m_dSpaceNumber2;
double m_dSpaceNumber3;
double m_dSpaceNumber4;
double m_dSpaceNumber5;
TCHAR m_cSpecName1[50];//REGADDR
TCHAR m_cSpecName2[50];
TCHAR m_cSpecName3[50];
TCHAR m_cSpecName4[50];
//-----timepage-----
BOOL startuptimebool;
BOOL thdstabool;
float thdstamin;
float thdstamax;
BOOL thddatbool;
float thddatmin;
float thddatmax;
BOOL tsustobool;
float tsustomin;
float tsustomax;
BOOL tsudatbool;
float tsudatmin;
float tsudatmax;
//-----CIICRuleCustizePage-----
BOOL m_ActiveRule;
int m_DATARule;
int m_SLAVEADDRRule;
int m_REGADDRRule;
public:
_iicparam();
TCHAR* GetAddressName();
bool SetAddressName(const TCHAR* pName);
TCHAR* GetDataName();
bool SetDataName(const TCHAR* pName);
TCHAR* GetBusName();
bool SetBusName(const TCHAR* pName);
void SetDefaultValue();
TCHAR* GetREGADDRName();
bool SetREGADDRName(const TCHAR* pName);
}IICPARAM;....这才其中一个结构体,这么多变量,每个变量的意思都要搞清楚typedef struct _DataBusModule //Bus Data Module Interface
{
char *description; // description
HWND hwndParent; // parent window (filled in by calling app)
HINSTANCE hDllInstance; // instance handle to this DLL (filled in by calling app) bool (*VidPid)(unsigned short vid,unsigned short pid);//The software will be connected with the hardware
bool (*supportcheck)(struct _DataBusModule *this_mod,int nVersion);//Check the version whether to need the Register number
void (*Config)(struct _DataBusModule *this_mod); // configuration dialog (if needed)
int (*Init)(struct _DataBusModule *this_mod, void* BPOP); // 0 on success, creates window, etc (if needed)
bool (*DoBus)(struct _DataBusModule *this_mod,void* pObject);
void (*CleanBus)(struct _DataBusModule *this_mod); //Clear package displaying in the Bus
void (*Quit)(struct _DataBusModule *this_mod); // called when unloading
void (*SetParamBuf)(void *pbuf,int size);
void* (*GetParamBuf)(int &size);
void (*SetBusTriParamBuf)(void *pbuf,int size);
void* (*GetBusTriParamBuf)(int &size);
int (*GetUnitCount)(); //get unit count
void (*GetUnit)(int nIndex,int &nFlag,COLORREF &clr,char *name,unsigned int &bitcount);////get single unit
bool (*CheckSerial)(char *sn);
bool (*PlugEnableUse)(); //Get the Right of using the module for users
int (*LeastSingalNum)(); //The necessary and Least signal number
bool (*BusListUnitShow)(short nFlag); //The appointed Flag characters serial will be displayed
bool (*BusListUnitName)(short nFlag,char *name); //The characters serial of Unit name
bool (*BusListUnitClr)(short nFlag,COLORREF &clr); //the below color of unit Name
bool (*BusListPackStart)(short nFlag); //The start flag of package
bool (*BusListPackEnd)(short nFlag); //The end flag of package
bool (*BusListDesShow)(); //Whether to display the description
bool (*BusListDesFlag)(short nFlag,char *name); //The Flag of necessary description, such as: LABEL_DATANACK
int (*Reserve0)(void); //The default function as below
int (*Reserve1)(void);
int (*Reserve2)(void);
int (*Reserve3)(void);
int (*Reserve4)(void);
int (*Reserve5)(int value);
int (*Reserve6)(int value);
int (*Reserve7)(int value);
bool (*Reserve8)(void);
bool (*Reserve9)(void);
void* (*Reserve10)(void* pdata);
void* (*Reserve11)(void* pdata);
void* (*Reserve12)(void* pdata);
void* (*Reserve13)(void* pdata);
void* (*Reserve14)(void* pdata);
void* userData; // user data, optional
} DATABUSMODULE;
这个结构体封装了这么多函数,这样用的好处难道是实例化之后就可以在结构体中调用函数名就可以调用这个函数了?