DLL程序和回调函数,看看有什么有关问题?不好意思就这点分了
DLL程序和回调函数,看看有什么问题?不好意思就这点分了
提供给二次开发方的DLL,主要是接收和解析数据,由二次开发方完成最后的处理函数,想采用回调函数的方式,能否指点一下下面的做法是否有什么问题?
void start() //dll中处理SOCKET接收数据函数
{
....//接收数据处理,略
while(s!=SOCKET_ERROR)
{
s=recv(msgsock[msgcount],buff,100,0); //buff为收到的数据
CString str;
if(buff.Mid(2,3)== "01 ") //如果在收到的数据中发现功能号是01
{
str = buff.Mid(4,10);
....//对收到数据进行解析,假设str是解析完成的数据
SendSaleData(str,CALLBACK ProceSaleData);//销售数据处理,ProceSaleData由二次开发方实现,这里str等
//解析出来的数据可否在回调函数ProceSaleData中当参数用?
}
if(buff.Mid(2,3)== "02 ") //如果在收到的数据中发现功能号是02
{
str = buff.Mid(4,10);
....//对收到数据进行解析,假设str是解析完成的数据
SendImportData(str,CALLBACK ProceImportData);//进货数据处理,ProceImportData由二次开发方实现
}
......
}
....
}
二次开发方加载DLL,并在自己的工程中实现上面的回调函数,可否?如果二次开发方用的是delphi等,是否也是可行?
------解决方案--------------------
可以用回调函数.
但要注意,声明和定义函数时,一定要有__stdcall,
还有参数的声明在dll和调用程序间保持一致
提供给二次开发方的DLL,主要是接收和解析数据,由二次开发方完成最后的处理函数,想采用回调函数的方式,能否指点一下下面的做法是否有什么问题?
void start() //dll中处理SOCKET接收数据函数
{
....//接收数据处理,略
while(s!=SOCKET_ERROR)
{
s=recv(msgsock[msgcount],buff,100,0); //buff为收到的数据
CString str;
if(buff.Mid(2,3)== "01 ") //如果在收到的数据中发现功能号是01
{
str = buff.Mid(4,10);
....//对收到数据进行解析,假设str是解析完成的数据
SendSaleData(str,CALLBACK ProceSaleData);//销售数据处理,ProceSaleData由二次开发方实现,这里str等
//解析出来的数据可否在回调函数ProceSaleData中当参数用?
}
if(buff.Mid(2,3)== "02 ") //如果在收到的数据中发现功能号是02
{
str = buff.Mid(4,10);
....//对收到数据进行解析,假设str是解析完成的数据
SendImportData(str,CALLBACK ProceImportData);//进货数据处理,ProceImportData由二次开发方实现
}
......
}
....
}
二次开发方加载DLL,并在自己的工程中实现上面的回调函数,可否?如果二次开发方用的是delphi等,是否也是可行?
------解决方案--------------------
可以用回调函数.
但要注意,声明和定义函数时,一定要有__stdcall,
还有参数的声明在dll和调用程序间保持一致