工作所想到的

本文探讨了在控件接口设计中使用通用数据类型替代特定结构体的必要性,以降低耦合度,并提供了两种改进方案。此外,文章还强调了上层应用在制定接口标准时应考虑底层设备的兼容性和支持情况,确保接口标准的合理性与实用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、关于控件接口/api接口的设计

如果主程序需要向控件中传递一些内容,这些内容需要在控件内部被包装成其他的内部处理的结构体或类,则建议在设计控件接口时,将接口需要的参数设计成通用的数据类型,而不是在主程序中使用控件内部需要的结构体形式进行控制,例如下面的例子:

//控件程序

typedef struct _AStruct{ //控件内部需要的结构体

DWORD A;

DWORD B;

} AStruct;


DWORD _stdcall _declspec(dllexport) Add(_AStruct& Struct)

{

return Struct.A + Struct.B;

}


//主程序

/* 获取控件中的相关函数的接口,这里省略,下面使用Add时表示已经获取到了*/

void SomeFunction()

{

AStruct struct;

struct.A = 0x00000001;

struct.B = 0x00000002;

print("相加后的数据值为:%d",Add(struct));

}

 我认为上面的这种操作方法不合适,因为如果在控件中的Struct结构体更改后,需要将主程序中的Struct声明加载,重新编译一下,这个就达不到低耦合的要求了,所以建议将其更改为如下两种方式:

//还是在控件中的结构体声明

typedef struct _AStruct{ //控件内部需要的结构体

DWORD A;

DWORD B;

} AStruct;

方法1)

DWORD _stdcall _declspec(dllexport) Add(DWORD& dword1, DWORD& dword2)

{

AStruct struct;

struct.A = dword1;

struct.B = dword2;

return Struct.A + Struct.B;

}


//主程序

/* 获取控件中的相关函数的接口,这里省略,下面使用Add时表示已经获取到了*/

void SomeFunction()

{

DWORD A = 0x00000001;

DWORD B = 0x00000002;

print("相加后的数据值为:%d",Add(A,B));

}


方法2)

DWORD _stdcall _declspec(dllexport) Add(_AStruct& Struct)

{

return Struct.A + Struct.B;

}

DWORD _stdcall _declspec(dllexport) AddEx(DWORD& dword1, DWORD& dword2)

{

AStruct struct;

struct.A = dword1;

struct.B = dword2;

return Add(struct);

}



//主程序

/* 获取控件中的相关函数的接口,这里省略,下面使用Add时表示已经获取到了*/

void SomeFunction()

{

DWORD A = 0x00000001;

DWORD B = 0x00000002;

print("相加后的数据值为:%d",Add(A,B));

}



2、关于程序的设计

我们公司提供的产品比较贴近底层,即可硬件打交道比较多,全国做我们这行的也不止我们一家;近期的项目基本都是这种类型的,即上层应用由客户提供,然后客户提供一个接口标准,我们厂家按照这个接口标准来实现;理想情况下,我们底层是必须根据客户提供的接口标准来实现功能,但是确实存在有的设备不支持某些功能...

不想写下去了,直接说我的想法吧:

上层在制定标准及接口时,应该多听听厂家的意见,看厂家的设备能支持那些功能,不能支持那些功能,虽说厂家必须要遵守上层应用的接口标准,但这个标准必须是合理的,而不能试由上层的某些相关负责人随意臆想后制定的;如果一个上层应用不能把用到的设备都进行了支持(或对大部分设备进行支持),则只能说明你这个应用是失败的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值