请大家看看这个DLL怎么调用—在线等!!

断弦吉他 2005-12-01 10:46:56
最近在对CMPP较感兴趣,用华为的DLL,其中一个函数原型如下,请大家帮忙看看在VB.net中应该

怎么调用?

int WINAPI SubmitA(unsigned char OrgTON, unsigned char OrgNPI, LPCTSTR OrgAddr, unsigned char DestTON, unsigned char DestNPI, LPCTSTR DestAddr, unsigned char PRI, unsigned char RD, unsigned char RP, unsigned char SRR, unsigned char MR, unsigned char DCS, unsigned char PID, LPCTSTR Schedule, LPCTSTR Expire, unsigned long Default_ID, unsigned char UDHI, unsigned long UDLen, LPCTSTR UserData, unsigned long* SM_ID, unsigned char* FCS);

菜鸟一个,才开始接触,请大家多指教!!谢谢
...全文
385 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
断弦吉他 2005-12-22
  • 打赏
  • 举报
回复
第二个链接无效啊
swordragon 2005-12-21
  • 打赏
  • 举报
回复
http://www.lzba.com.cn/boho/blog/blogview.asp?logID=81

http://www.spzone.net/bbs/topic.asp?topic_id=4880&forum_id=7
断弦吉他 2005-12-21
  • 打赏
  • 举报
回复
郁闷得要死!!!!!
断弦吉他 2005-12-21
  • 打赏
  • 举报
回复
我找到了一点门道,不过又发现了一个问题:

我利用 SubmitA 这个函数测试:

【C的函数原型】:

int WINAPI SubmitA(unsigned char OrgTON, unsigned char OrgNPI, LPCTSTR OrgAddr, unsigned char DestTON, unsigned char DestNPI, LPCTSTR DestAddr, unsigned char PRI, unsigned char RD, unsigned char RP, unsigned char SRR, unsigned char MR, unsigned char DCS, unsigned char PID, LPCTSTR Schedule, LPCTSTR Expire, unsigned long Default_ID, unsigned char UDHI, unsigned long UDLen, LPCTSTR UserData, unsigned long* SM_ID, unsigned char* FCS);

【我在VB.net的声明】:

Public Declare Function SubmitA Lib "SMEIDll.dll" (ByVal OrgTON As Byte, ByVal OrgNPI As Byte, ByVal OrgAddr As String, ByVal DestTON As Byte, ByVal DestNPI As Byte, ByVal DestAddr As String, ByVal PRI As Byte, ByVal RD As Byte, ByVal RP As Byte, ByVal SRR As Byte, ByVal MR As Byte, ByVal DCS As Byte, ByVal PID As Byte, ByVal Schedule As String, ByVal Expire As String, ByVal Default_ID As Long, ByVal UDHI As Byte, ByVal UDLen As Long, ByVal UserData As String, ByRef SM_ID As Long, ByRef FCS As Byte) As Integer

【我的调用】:

Try
Dim i As Integer
Dim SM_ID As Long = 0
Dim FCS As New Byte

i = SubmitA(2, 1, TxtSendNo.Text, 2, 1, TxtRcvNo.Text, 0, 0, 0, 0, 0, 8, 0, "", "", 0, 0, Len(TxtMessage.Text), txtMessage.text, SM_ID, FCS)
If i = 0 Then
MessageBox.Show("从源地址:" & TxtSendNo.Text & Chr(13) & "发送短信:#" & TxtMessage.Text & "#到" & Chr(13) & "目的地址:" & TxtRcvNo.Text & Chr(13) & "成功!" & Chr(13) & "SM_ID=" & SM_ID & Chr(13) & "FCS=", "发送成功", MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
MsgBox(i)
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
【调用结果】:

可以成功发送,但对方手机接收后没有内容(空短信),即DLL没有取到TxtMessage的内容(我这样认为),而且FCS和SM_Id没有返回值。
断弦吉他 2005-12-19
  • 打赏
  • 举报
回复

TO:swordragon(古道热肠)
已将函数定义发送到您邮箱,请注意查收,谢谢!
swordragon 2005-12-19
  • 打赏
  • 举报
回复
如果方便的话,请把包含SubmitAExEx这个方法的dll发给我,以下是我的定义,你试试:
Public Declare Function SubmitAExEx Lib "SMEIDll.dll" ( _
ByVal OrgTON As Byte, _
ByVal OrgNPI As Byte, _
ByVal OrgAddr As String, _
ByVal DestTON As Byte, _
ByVal DestNPI As Byte, _
ByVal DestAddr As String, _
ByVal PRI As Byte, _
ByVal RD As Byte, _
ByVal RP As Byte, _
ByVal SRR As Byte, _
ByVal MR As Byte, _
ByVal DCS As Byte, _
ByVal PID As Byte, _
ByVal Schedule As String, _
ByVal Expire As String, _
ByVal Default_ID As Long, _
ByVal UDHI As Byte, _
ByVal UDLen As Long, _
ByVal UserData As String, _
ByVal ServiceSubType As String, _
ByRef byMsgID As String, _
ByVal byPKTotal As Byte, _
ByVal byPKNumber As Byte, _
ByVal byMsglevel As Byte, _
ByVal byFeeUserType As Byte, _
ByVal sSPID As String, _
ByVal sFeeType As String, _
ByVal sFeeAddr As String, _
ByVal sFeeCode As String, _
ByVal byUserNum As Byte, _
ByVal sDestAddrs As String, _
ByRef SM_ID As Long, _
ByRef FCS As String) As Integer

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim intRet As Integer

Dim SM_ID As Long
Dim FCS As String

intRet = SubmitAExEx(0, 4, "1", 0, 0, "1", 0, 0, 0, 0, 0, 0, 0, _
"2005/12/20 12:12:12", "2005/12/20 16:16:16", 100, 0, 7, "1234567", _
"Test", "100", 1, 1, 0, 0, "018600", "01", "13992544427000000000", _
"000000", 1, "13992544427", SM_ID, FCS)

TextBox1.Text = intRet.ToString()
End Sub
断弦吉他 2005-12-19
  • 打赏
  • 举报
回复
我这样调用:
Dim byMsgID As String
Dim SM_ID As Long
Dim FCS As String

SM_ID = 0
FCS = New String(Chr(0), 21)
byMsgID = New String(Chr(0), 21)
Dim i As Integer
i = SubmitAExEx(2, 1, "018600", 2, 1, "13992544427", 0, 0, 0, 0, 0, 8, 0, "2005/12/19 10:20:00", "2005/12/19 17:00:00", 0, 0, 7, "1234567", "Test", "100", 1, 1, 0, 0, "018600", "01", "13992544427000000000", "000000", 1, "13992544427", SM_ID, FCS)


可是老是提示我“未处理的“System.NullReferenceException”类型的异常出现在 CMPP3Test.exe 中。其他信息: 未将对象引用设置到对象的实例。”
断弦吉他 2005-12-19
  • 打赏
  • 举报
回复
Sorry!
函数原型:
int WINAPI SubmitAExEx(
unsigned char OrgTON, //源地址号码类型
unsigned char OrgNPI, //源地址编码方案
LPCTSTR OrgAddr, //源地址 char[MAX_ADDR_LEN]
unsigned char DestTON, //目标地址号码类型
unsigned char DestNPI, //目标地址编码方案
LPCTSTR DestAddr,/*update*/ //目的地址,SMPP时使用
unsigned char PRI, //SM优先级
unsigned char RD, //当源地址和目的地址相同时,是否替换存在的短消息。
unsigned char RP, //回应路径
unsigned char SRR, //是否需要状态报告
unsigned char MR, //消息索引
unsigned char DCS, //数据编码方案
unsigned char PID, //协议类型
LPCTSTR Schedule, //定时 char[MAX_TIMESTAMP_LEN]
LPCTSTR Expire, //超时时间 char[MAX_TIMESTAMP_LEN]
unsigned long Default_ID, //缺省短消息
unsigned char UDHI, //1表示UD为一个结构,0表示缺省
unsigned long UDLen, //表示UD的长度
LPCTSTR UserData, //用户信息,短消息正文
LPCTSTR sServiceType, //业务子类型 by ycl 2001.7.9
unsigned char* byMsgID,/*new*/ //MAX_MSG_ID,CMPP的字段,消息ID
unsigned char byPKTotal,/*new*/ //相同Msg_id的消息总条数,从1开
unsigned char byPKNumber,/*new*/ //相同Msg_id的消息序号,从1开始
unsigned char byMsglevel,/*new*/ //信息级别
unsigned char byFeeUserType,/*new*/ //计费用户类型字段,0:对目的终端MSISDN计费;1:对源终端MSISDN计费;2:对SP计费;3:表示本字段无效
LPCTSTR sSPID,/*new*/ //MAX_SPID_LEN,信息内容来源
LPCTSTR sFeeType,/*new*/ //MAX_FEE_TYPE_LEN,资费类别
LPCTSTR sFeeAddr,/*new*/ //MAX_ADDR_LEN,被计费用户地址
LPCTSTR sFeeCode,/*new*/ //MAX_FEE_CODE_LEN,资费代码
unsigned char byUserNum,/*new*/ //接收消息的用户数量
LPCTSTR sDestAddrs,/*new*/ //目的地址,最多100个,CMPP使用
unsigned long* SM_ID, //返回:短消息ID
unsigned char* FCS ) //返回:失败原因
swordragon 2005-12-19
  • 打赏
  • 举报
回复
TO: breakguitar(断弦吉他)

你给我的动态库里面好像没有这个函数耶。

能明示吗?
断弦吉他 2005-12-19
  • 打赏
  • 举报
回复

swordragon(古道热肠)

是这个函数:
SubmitAExEx
swordragon 2005-12-19
  • 打赏
  • 举报
回复
我这里和你的报相同的错误。
断弦吉他 2005-12-19
  • 打赏
  • 举报
回复
不需要,可以直接Submit,看到错误
swordragon 2005-12-19
  • 打赏
  • 举报
回复

ByRef byMsgID As String
改为
ByRef byMsgID As StringBuilder
试试。

我这里无法上网,除了msdn,所以,无法正确的初始化和登录,郁闷……
断弦吉他 2005-12-19
  • 打赏
  • 举报
回复
是的,IFinitinterface 和Login_R都没有问题
swordragon 2005-12-19
  • 打赏
  • 举报
回复
IFInitInterface和Login_R这两个方法返回的都是true吗?
swordragon 2005-12-16
  • 打赏
  • 举报
回复
Public Declare Function SubmitA Lib "SMEIDll.dll" ( _
ByVal OrgTON As Byte, _
ByVal OrgNPI As Byte, _
ByVal OrgAddr As String, _
ByVal DestTON As Byte, _
ByVal DestNPI As Byte, _
ByVal DestAddr As String, _
ByVal PRI As Byte, _
ByVal RD As Byte, _
ByVal RP As Byte, _
ByVal SRR As Byte, _
ByVal MR As Byte, _
ByVal DCS As Byte, _
ByVal PID As Byte, _
ByVal Schedule As String, _
ByVal Expire As String, _
ByVal Default_ID As Long, _
ByVal UDHI As Byte, _
ByVal UDLen As Long, _
ByVal UserData As String, _
ByRef SM_ID As Long, _
ByRef FCS As String) As Integer

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim intRet As Integer

Dim SM_ID As Long
Dim FCS As String

intRet = SubmitA(0, 4, "1", 0, 0, "1", 0, 0, 0, 0, 0, 0, 0, "2005/12/20 12:12:12", "2005/12/20 16:16:16", 100, 0, 7, "1234567", SM_ID, FCS)
End Sub
断弦吉他 2005-12-13
  • 打赏
  • 举报
回复
???????????????????????



有没有大侠帮帮忙啊?
GuitarBreak 2005-12-05
  • 打赏
  • 举报
回复
帮顶
断弦吉他 2005-12-05
  • 打赏
  • 举报
回复
有没有搞过这个的大侠???

帮帮忙啊!!

swordragon(古道热肠)

怎么不见了???
swordragon 2005-12-05
  • 打赏
  • 举报
回复
会不会是传递的参数不对呢?
加载更多回复(8)

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧