caodongchun 发表于 2009-7-28 16:15:29

请问如何call这个dll

call和好几次总是error 3

caodongchun 发表于 2009-7-28 16:22:32

本帖最后由 caodongchun 于 2009-7-28 16:36 编辑

只要可行偶给第一个评分60,或给200分,言不由衷版主封号

hnzzlzj 发表于 2009-8-29 15:20:27

这个俺不懂,不过也的顶起来让别人看到你的帖子来帮助你

sxd 发表于 2009-8-31 16:16:37

话说 你这个是需要硬件支持的吧 不然人家飞信库就不要做了....
当然如果你有硬件的话 看他的头文件 里面有函数注释


/////////////////////////////////////////////////////////////////////////
/*@
        文件名称:        DllFunctionDef.h
        文件描述:        定义DLL导出函数及一些常量定义
*/
/////////////////////////////////////////////////////////////////////////

//接收事件窗口消息ID定义
#define SMSDLL_EVENTWND        WM_USER + 777
/*@窗口消息参数定义
WPARAM 端口序号
LPARAM 事件通知类型:1为异步连接短信猫返回结果通知;2为新短信通知;3、有来电通知;4、发送结果通知;5、SIM卡已满通知;6、SIM卡余额不足
事件参数,从注册表固定位置(HKEY_CURRENT_USER\Software\JinDiSoft)读取字符串键值SmsEventPara。
参数格式,如果是多个参数以!#分割,下面是针对每个事件的参数定义
事件1:参数只有1个返回连接设备的状态,0表示连接失败,1表示连接成功,连接成功后才能进行发送短信等操作
事件2:参数只有1个,是新短信在SIM卡中保存的序号,得到此序号后可以调用读取短信获取来信其它信息
事件3:参数只有1个,是来电号码,可以不处理
事件5:没有参数,收到此事件时,需要尽快读取短信后删除,否则无法接收新的短信
事件6:没有参数,收到此事件时,需要尽快给SIM卡充值,否则无法再继续发送短信
事件4:一共6个参数,第一个参数是发送短信的ID编号,第二个参数是发送的目标号码,第三个参数是发送的内容;第四个参数是发送时内容拆分的序号;第五个参数时发送的状态(0表示成功,1表示超时,2表示发送失败)
*/

/// ERetCode,所有的API返回码定义
typedef enum
{
        RETCODE_OK                        = 0,//没有错误
        RETCODE_UNREG                = 1,//未注册
        RETCODE_PARAINVALID        = 2,//输入参数无效
        RETCODE_UNINIT                = 3,//未初始化
        RETCODE_INITREPEAT        = 4,//重复初始化
        RETCODE_WAITEVENT        = 5,//由于使用的异步工作方式,需要等待事件通知才能确定是否成功
        RETCODE_BUSY                = 6,//状态忙,通常前面的工作正在处理中,未完成前又发了新的命令才返回这个值
        RETCODE_ERROR                = 7,//发生错误
        RETCODE_TIMEOUT                = 8   //超时
} ERetCode;

///////////////////////////////// API函数定义/////////////////////////////////
/**
* @brief 获取当前系统COMM串口个数,未初始化模块也可以调用
*
*
* @param pVal 返回个数
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetCommCount)(OUT short *pVal);

/**
* @brief 获取指定编号的COMM串口序号,先调用SmsApi_GetCommCount获得个数
*
*
* @param sIndex 编号,从0开始
* @param pVal 返回COM串口序号
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetComm)(IN short sIndex,OUT short *pVal);

/**
* @brief 设置工作模式,在初始化模块前设置对初始化模块有效,在发送短信前设置对发送短信有效
*
*
* @param bSync true表示同步方式,否则异步方式
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_SetWorkMode)(bool bSync);

/**
* @brief 获取当前工作模式,未初始化模块也可以调用
*
*
* @param pSync true表示同步方式,否则异步方式
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetWorkMode)(OUT bool *pSync);

/**
* @brief 设置发送短信的起始序号,未初始化模块也可以调用,为保证短信序号唯一,最好不断增加此序号大小
*
*
* @param ulMsgID 短信序号
* @return
*/
typedef ERetCode ( WINAPIV lpSmsApi_SetMsgID)(IN ULONG ulMsgID);

/**
* @brief 获得当前提交发送短信的序号,未初始化模块也可以调用
*
*
* @param pMsgID 短信序号,提交发送短信后调用此方法可获得提交生成的ID,这个ID会在发送结果通知中作为唯一此短信的标识
* @return
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetMsgID)(OUT ULONG *pMsgID);

/**
* @brief 初始化打开模块,必须初始化才能收发短信
*
*
* @param sCommPort 指定端口(COM1就是1,COM2就是2,以此类推),最大不超过256
* @param lCommPara 指定通信波特率(0表示自动判断波特率,一般是9600或115200)
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_OpenCom)(IN short sCommPort,IN long lCommPara);

/**
* @brief 获取通讯波特率,未初始化模块也可以调用
*
*
* @param pCommPara 返回通讯波特率
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetCommPara)(OUT long *pCommPara);

/**
* @brief 设置通讯波特率,未初始化模块也可以调用
*
*
* @param lCommPara 通讯波特率,一般是9600或115200
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_SetCommPara)(IN long lCommPara);

/**
* @brief 获得设备名称,必须初始化成功后才能调用
*
*
* @param szMobileName 输入参数,预先至少分配16长度的缓存
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetMobileName)(OUT char *szMobileName);

/**
* @brief 获得模块型号,必须初始化成功后才能调用
*
*
* @param szMobileModel 输入参数,预先至少分配32长度的缓存
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetMobileModel)(OUT char *szMobileModel);

/**
* @brief 获得模块版本,必须初始化成功后才能调用
*
*
* @param szMobileVersion 输入参数,预先至少分配32长度的缓存
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetMobileVersion)(OUT char *szMobileVersion);

/**
* @brief 获得模块IMEI,必须初始化成功后才能调用
*
*
* @param szMobileIMEI 输入参数,预先至少分配32长度的缓存
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetMobileIMEI)(OUT char *szMobileIMEI);

/**
* @brief 获得短信中心号码,CDMA无效,必须初始化成功后才能调用
*
*
* @param szSMCA 返回短信中心号码,是否加国际代码如86与发送短信规则一致
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetSmsc)(OUT char *szSMCA);

/**
* @brief 设置短信中心号码,CDMA无效,必须初始化成功后才能调用,一般只需要设置一次
*
*
* @param szSMCA 短信中心号码,是否加国际代码如86与发送短信规则一致
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_SetSmsc)(IN char *szSMCA);

/**
* @brief 获取AT指令执行超时时间,未初始化模块也可以调用
*
*
* @param pTimeout 返回超时时间,以秒为单位
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetTimeout)(OUT short *pTimeout);

/**
* @brief 设置AT指令执行超时时间,未初始化模块也可以调用
*
*
* @param sTimeout 超时时间,以秒为单位,缺省15秒
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_SetTimeout)(IN short sTimeout);

/**
* @brief 设置接收事件通知消息的窗口句柄,未初始化模块也可以调用
*
*
* @param hWnd 窗口句柄,如果不设置,无法接收相应的事件通知
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_SetEventWnd)(IN HWND hWnd);

/**
* @brief 发送文字短信,必须初始化成功后才能调用
*
*
* @param szMobileNumber 目标号码,如果启用了国际代码标志,就不用加国籍代码如86,支持群发,以分号;间隔即可
* @param szMsgContent       发送内容,可超过70个汉字
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_SendMsg)(IN char *szMobileNumber,\
                                       IN char *szMsgContent);

/**
* @brief 发送WAP PUSH短信,必须初始化成功后才能调用
*
*
* @param szMobileNumber 目标号码,如果启用了国际代码标志,就不用加国籍代码如86,支持群发,以分号;间隔即可
* @param szMsgSubject       发送主题,尽量简短
* @param szMsgUrl               发送URL
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_SendPushMsg)(IN char *szMobileNumber,\
                                       IN char *szMsgSubject,IN char *szMsgUrl);

/**
* @brief 读取指定位置短信,必须初始化成功后才能调用
*
*
* @param sPosition 短信在SIM卡上的位置
* @param szMobileNumber 返回来信号码,最少分配32长度缓存
* @param szTime 返回对方发送时间,最少分配32长度缓存
* @param szMsgContent 返回发送内容,最少分配140长度缓存
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_ReadMsg)(IN short sPosition,OUT char *szMobileNumber,\
                                        OUT char *szTime,OUT char *szMsgContent);

/**
* @brief 删除指定范围位置短信,必须初始化成功后才能调用
*
*
* @param sStartPosition 短信在SIM卡上的开始位置
* @param sEndPosition短信在SIM卡上的结束位置,如果开始位置和结束位置一样,表示只删除开始位置短信
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_DeleteMsg)(IN short sStartPosition,IN short sEndPosition);

/**
* @brief 获取读取短信后是否自动删除短信标志,未初始化模块也可以调用
*
*
* @param pAutoDelete 返回是否自动删除
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetAutoDelete)(OUT bool *pAutoDelete);

/**
* @brief 设置读取短信后是否自动删除短信,未初始化模块也可以调用
*
*
* @param bAutoDeleteFlag 是否自动删除
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_SetAutoDelete)(IN bool bAutoDeleteFlag);

/**
* @brief 清理SIM卡上所有短信,必须初始化成功后才能调用
*
*
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_ClearSim)();

/**
* @brief 获得SIM卡上短信数量,必须初始化成功后才能调用
*
*
* @param pUsed 返回已经有的短信数量
* @param pTotal 返回总计存储空间
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetSimNum)(OUT short *pUsed,OUT short *pTotal);

/**
* @brief 执行AT命令,必须初始化成功后才能调用
*
*
* @param ATCmd AT命令
* @param pBuffLength 返回命令返回内容的长度,应用根据此长度分配对应的缓存再调用SmsApi_GetATCommandReturn获得返回字符串
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_ATCommand)(IN char *ATCmd,OUT short *pBuffLength);

/**
* @brief 获得AT命令执行结果,必须初始化成功后才能调用
*
*
* @param pRetBuff 返回预先根据执行结果返回的长度分配缓存内容
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetATCommandReturn)(OUT char *pRetBuff);

/**
* @brief 获取发送短信状态报告标记,未初始化模块也可以调用
*
*
* @param pStatusReport 返回是否请求状态报告
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetStatusReport)(OUT bool *pStatusReport);

/**
* @brief 设置读取短信后是否自动删除短信,未初始化模块也可以调用,此状态对后续短信都起作用
*
*
* @param bStatusReport 是否请求状态报告,缺省否
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_SetStatusReport)(IN bool bStatusReport);

/**
* @brief 获取是否发送闪烁文字短信,未初始化模块也可以调用
*
*
* @param pFlashSms 返回是否请求状态报告
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetFlashSms)(OUT bool *pFlashSms);

/**
* @brief 设置是否发送闪烁文字短信,未初始化模块也可以调用,此状态对后续短信都起作用
*
*
* @param bFlashSms 是否请求状态报告,缺省否
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_SetFlashSms)(IN bool bFlashSms);

/**
* @brief 获得发送短信时的签名,未初始化模块也可以调用
*
*
* @param szSignName 返回自动在发送内容前添加的签名,预先至少分配32长度的缓存
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetSignName)(OUT char *szSignName);

/**
* @brief 设置发送短信时的签名,未初始化模块也可以调用,此状态对后续短信都起作用
*
*
* @param szSignName 自动在发送内容前添加签名
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_SetSignName)(IN char *szSignName);

/**
* @brief 获取发送短信的有效期,未初始化模块也可以调用
*
*
* @param pValidMinute 返回发送短信的有效期
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetMsgValidMinute)(OUT long *pValidMinute);

/**
* @brief 设置发送短信的有效期,未初始化模块也可以调用
*
*
* @param lValidMinute 发送短信的有效期
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_SetMsgValidMinute)(IN long lValidMinute);

/**
* @brief 获取发送开始的时间,未初始化模块也可以调用
*
*
* @param pSendStartTime 返回发送开始的时间
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetSendStartTime)(OUT DATE *pSendStartTime);

/**
* @brief 设置发送开始的时间,未初始化模块也可以调用
*
*
* @param sSendStartTime 发送开始的时间,缺省是0.0或与发送结束时间相同表示不限时间发送
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_SetSendStartTime)(IN DATE sSendStartTime);

/**
* @brief 获取发送结束的时间,未初始化模块也可以调用
*
*
* @param pSendEndTime 返回发送结束的时间
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetSendEndTime)(OUT DATE *pSendEndTime);

/**
* @brief 设置发送结束的时间,未初始化模块也可以调用
*
*
* @param sSendEndTime 发送结束的时间,缺省是0.0或与发送开始时间相同表示不限时间发送
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_SetSendEndTime)(IN DATE sSendEndTime);

/**
* @brief 获得SIM卡序号,未初始化模块也可以调用
*
*
* @param szSimCardID 返回SIM卡序号,不是手机号码,预先至少分配32长度的缓存
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetSimCardID)(OUT char *szSimCardID);

/**
* @brief 获取发送的短信是否自动拆分发送,未初始化模块也可以调用
*
*
* @param pAutoSplite 返回是否自动拆分发送
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetAutoSplite)(OUT bool *pAutoSplite);

/**
* @brief 设置发送的短信是否自动拆分发送,未初始化模块也可以调用,此状态对后续短信都起作用
*
*
* @param bAutoSplite 是否自动拆分发送
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_SetAutoSplite)(IN bool bAutoSplite);

/**
* @brief 获得国别代码,未初始化模块也可以调用
*
*
* @param szCountryCode 返回国别代码,是否加国际代码如86与发送短信规则一致
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetCountryCode)(OUT char *szCountryCode);

/**
* @brief 设置国别代码,未初始化模块也可以调用,一般只需要设置一次,此状态对后续短信都起作用
*
*
* @param szCountryCode 国别代码,缺省86代表中国
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_SetCountryCode)(IN char *szCountryCode);

/**
* @brief 获取当前将要提交发送短信的优先级,未初始化模块也可以调用
*
*
* @param pSendPriority 返回当前将要提交发送短信的优先级
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetSendPriority)(OUT short *pSendPriority);

/**
* @brief 设置当前将要提交发送短信的优先级,未初始化模块也可以调用,此状态对后续短信都起作用
*
*
* @param sSendPriority 当前将要提交发送短信的优先级,1-32,数值越大,优先发送
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_SetSendPriority)(IN short sSendPriority);

/**
* @brief 获取将要发送英文短信,未初始化模块也可以调用
*
*
* @param pEnglishMsg 返回将要发送英文短信
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetEnglishMsg)(OUT bool *pEnglishMsg);

/**
* @brief 设置将要发送英文短信,未初始化模块也可以调用,此状态对后续短信都起作用
*
*
* @param bEnglishMsg 是否将要发送英文短信
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_SetEnglishMsg)(IN bool bEnglishMsg);

/**
* @brief 获取设备当前信号强度,必须初始化成功后才能调用
*
*
* @param pSignal 返回设备当前信号强度,小于15可能导致发送短信失败
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetSignal)(OUT short *pSignal);

/**
* @brief 获得呼叫转移号码,必须初始化成功后才能调用
*
*
* @param szCallTransfer 返回国别代码,是否加国际代码如86与发送短信规则一致
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetCallTransfer)(OUT char *szCallTransfer);

/**
* @brief 设置呼叫转移号码,必须初始化成功后才能调用,一般只需要设置一次,如果号码为空,表示取消当前所有转移号码
*
*
* @param szCallTransfer 呼叫转移号码,必须SIM卡支持才能设置
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_SetCallTransfer)(IN char *szCallTransfer);

/**
* @brief 获得Fireware版本,必须初始化成功后才能调用
*
*
* @param szFirewareVerion 返回Fireware版本,最少分配64长度缓存
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetFirewareVerion)(OUT char *szFirewareVerion);

/**
* @brief 获取当前排队等候发送的任务数量,必须初始化成功后才能调用
*
*
* @param pWaitSend 返回当前排队等候发送的任务数量
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetWaitSend)(OUT ULONG *pWaitSend);

/**
* @brief 退出模块,当程序退出或不再需要短信服务时调用以便及时释放资源
*
*
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_CloseCom)();

/**
* @brief 获得出错信息,当调用某个API出错时调用此方法获取出错信息
*
*
* @param pErrInfo 返回内部缓冲的最近一次操作出错信息
* @return 参照ERetCode定义
*/
typedef ERetCode ( WINAPIV lpSmsApi_GetErrInfo)(OUT char *pErrInfo);

caodongchun 发表于 2009-8-31 19:47:37

是的,需要硬件,短信猫或支持串口发短信的MP
楼上,这个dll可能au3 call不出来,据说delphi拿这个也没办法,不属于std call
后来自己做了个利用mscomm obj的udf,使用正常!

sxd 发表于 2009-9-1 02:33:43

嗯啊 不是stdcall和cdecl
au3 call不了

如果不涉及到隐私问题 请共享下udf吧

caodongchun 发表于 2009-9-1 09:33:22

http://www.autoitx.com/forum.php?mod=viewthread&tid=8955
页: [1]
查看完整版本: 请问如何call这个dll