首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

邀请大峡一起来找茬,调用vc的dll,出现未将对象引用设置到对象的实例异常.

2012-03-20 
邀请大峡一起来找茬,调用vc的dll,出现未将对象引用设置到对象的实例错误....[错误内容]未处理的“System.Nu

邀请大峡一起来找茬,调用vc的dll,出现未将对象引用设置到对象的实例错误....
[错误内容]
未处理的“System.NullReferenceException”类型的异常出现在   cmppAPI_test.exe   中。

其他信息:   未将对象引用设置到对象的实例

[部分代码]

[函数定义]
public   class   API_SubmitSMS
{
[DllImport( "LongSms.dll ",EntryPoint= "Cmpp_submitSMS ",SetLastError=true,CharSet=CharSet.Unicode,ExactSpelling=true,CallingConvention=CallingConvention.Cdecl)]  
public   static   extern   int   Cmpp_submitSMS
(
StringBuilder   SMId,//1
StringBuilder   Registered_Delivery   ,//2
StringBuilder   Msg_level   ,//3
byte[]   Service_Id   ,//4
StringBuilder   Fee_UserType   ,//5
byte[]   Fee_terminal_Id   ,//6
StringBuilder   Fee_terminal_type,//7
StringBuilder   TP_udhi,//8
StringBuilder   Msg_Fmt   ,//9
byte[]   Msg_src   ,//10
byte[]   FeeType   ,//11
byte[]   FeeCode   ,//12
byte[]   ValId_Time   ,//13
byte[]   At_Time   ,//14
byte[]   Src_Id   ,//15
StringBuilder   DestUsr_tl   ,//16
byte[]   Dest_terminal_Id   ,//17
StringBuilder   Dest_terminal_type,//18
StringBuilder   Msg_Length   ,//19
byte[]   Msg_Content   ,//20
StringBuilder   LinkID,//21
StringBuilder   Msg_Id,//22
ulong   Result//23
);
}

[调用]
//1
string   s_SMID   =   " ";
//byte[]   s1   =   System.Text.Encoding.Unicode.GetBytes(s_SMID);
System.Text.StringBuilder   s1   =   new   System.Text.StringBuilder(s_SMID);


//4   是否要求返回状态确认报告:0:不需要;1:需要;2:产生SMC话单(该类型短信仅供网关计费使用,不发送给目的终端)
string   s_Registered_Delivery   =   " ";
//byte[]   s2   =   System.Text.Encoding.Unicode.GetBytes(s_Registered_Delivery);
System.Text.StringBuilder   s2   =   new   System.Text.StringBuilder(s_Registered_Delivery);

//5   信息优先级别
string   s_Msg_level   =   " ";
//byte[]   s3   =   System.Text.Encoding.Unicode.GetBytes(s_Msg_level);
System.Text.StringBuilder   s3   =   new   System.Text.StringBuilder(s_Msg_level);

//6   业务类型,是数字、字母和符号的组合。
string   s_Service_Id   =   " ";
byte[]   s4   =   System.Text.Encoding.Unicode.GetBytes(s_Service_Id);

//7   计费用户类型字段,0:对目的终端MSISDN计费;1:对源终端MSISDN计费;2:对SP计费;3:表示本字段无效,对谁计费参见Fee_terminal_Id字段。
string   s_Fee_UserType   =   " ";
//byte[]   s5   =   System.Text.Encoding.Unicode.GetBytes(s_Fee_UserType);
System.Text.StringBuilder   s5   =   new   System.Text.StringBuilder(s_Fee_UserType);

//8   被计费用户的号码(如本字节填空,则表示本字段无效,对谁计费参见Fee_UserType字段,本字段与Fee_UserType字段互斥)
string   s_Fee_terminal_Id   =   " ";
byte[]   s6   =   System.Text.Encoding.Unicode.GetBytes(s_Fee_terminal_Id);

//9   GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.9
string   s_Fee_terminal_type   =   " ";
//byte[]   s7   =   System.Text.Encoding.Unicode.GetBytes(s_Fee_terminal_type);
System.Text.StringBuilder   s7   =   new   System.Text.StringBuilder(s_Fee_terminal_type);

//10   GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐
//发送超长短信应将该值置为1
string   s_TP_udhi   =   " ";
//byte[]   s8   =   System.Text.Encoding.Unicode.GetBytes(s_TP_udhi);


System.Text.StringBuilder   s8   =   new   System.Text.StringBuilder(s_TP_udhi);

//11   信息格式,0:ASCII串;   3:短信写卡操作;4:二进制信息;8:UCS2编码;15:含GB汉字     。。。。。。
string   s_Msg_Fmt   =   " ";
//byte[]   s9   =   System.Text.Encoding.Unicode.GetBytes(s_Msg_Fmt);
System.Text.StringBuilder   s9   =   new   System.Text.StringBuilder(s_Msg_Fmt);

//12   信息内容来源(SP_Id),sp的企业代码
string   s_Msg_src   =   " ";
byte[]   s10   =   System.Text.Encoding.Unicode.GetBytes(s_Msg_src);

//13   资费类别,01:对“计费用户号码”免费;02:对“计费用户号码”按条计信息费;
//03:对“计费用户号码”按包月收取信息费;04:对“计费用户号码”的信息费封顶;
//05:对“计费用户号码”的收费是由SP实现
string   s_FeeType   =   " ";
byte[]   s11   =   System.Text.Encoding.Unicode.GetBytes(s_FeeType);

//14   资费代码(以分为单位),如:“0050”代表人民币0.50元
string   s_FeeCode   =   " ";
byte[]   s12   =   System.Text.Encoding.Unicode.GetBytes(s_FeeCode);

//15   存活有效期,格式遵循SMPP3.3协议
string   s_ValId_Time   =   " ";
byte[]   s13   =   System.Text.Encoding.Unicode.GetBytes(s_ValId_Time);

//16   定时发送时间,格式遵循SMPP3.3协议。这个字段可以让短信在规定的时间内发送给手机用户。
//一般情况下不添,保留为空字符串
string   s_At_Time   =   " ";
byte[]   s14   =   System.Text.Encoding.Unicode.GetBytes(s_At_Time);

//17   源号码,SP的服务代码或前缀为服务代码的长号码,
//网关将该号码完整的填到SMPP协议Submit_SM消息相应的source_addr字段,
//该号码最终在用户手机上显示为短消息的主叫号码
string   s_Src_Id   =   " ";
byte[]   s15   =   System.Text.Encoding.Unicode.GetBytes(s_Src_Id);

//18,接收信息的用户数量(小于100个用户)
//通常为1,但长短信这如何添?
string   s_DestUsr_tl   =   " ";
//byte[]   s16   =   System.Text.Encoding.Unicode.GetBytes(s_DestUsr_tl);
System.Text.StringBuilder   s16   =   new   System.Text.StringBuilder(s_DestUsr_tl);

//19   接收短信的MSISDN号码,一个类似字符串数组的结构。受DestUsr_tl的约束,决定了本字段的长度。
//21*DestUsr_tl
string   s_Dest_terminal_Id   =   "13912345678 ";
byte[]   s17   =   System.Text.Encoding.Unicode.GetBytes(s_Dest_terminal_Id);

//20   只有在cmpp3.0里面使用
string   s_Dest_terminal_type   =   " ";
//byte[]   s18   =   System.Text.Encoding.Unicode.GetBytes(s_Dest_terminal_type);
System.Text.StringBuilder   s18   =   new   System.Text.StringBuilder(s_Dest_terminal_type);

//21   信息长度(Msg_Fmt值为0时: <160个字节;其它 <=140个字节)
string   s_Msg_Length   =   " ";
//byte[]   s19   =   System.Text.Encoding.Unicode.GetBytes(s_Msg_Length);
System.Text.StringBuilder   s19   =   new   System.Text.StringBuilder(s_Msg_Length);

//22   信息内容,一般情况下存在汉字传输,所以默认的编码/解码应该为Encoding.Default
string   s_Msg_Content   =   " ";
//byte[]   s20   =   System.Text.Encoding.GetEncoding(1252).GetBytes(s_Msg_Content);
byte[]   s20   =   System.Text.Encoding.Unicode.GetBytes(s_Msg_Content);

//23   只有cmpp3.0里面使用
string   s_LinkID   =   " ";
//byte[]   s21   =   System.Text.Encoding.Unicode.GetBytes(s_LinkID);
System.Text.StringBuilder   s21   =   new   System.Text.StringBuilder(s_LinkID);

//24   输出参数,返回网关返回的ID
string   s_Msg_Id   =   " ";
//byte[]   s22   =   System.Text.Encoding.Unicode.GetBytes(s_Msg_Id);
System.Text.StringBuilder   s22   =   new   System.Text.StringBuilder(s_Msg_Id);



//25   0:不等待网关回应;1,等待网关回应后返回
ulong   Result   =   0;
//

int   submit   =   API_Class.API_SubmitSMS.Cmpp_submitSMS(s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17,s18,s19,s20,s21,s22,Result);  

请问为什么会出现
未将对象引用设置到对象的实例错误....?
达人快进来啊,在线等,急啊,求救//求救,,,,,,

[解决办法]
你先不要用int submit = API_Class.API_SubmitSMS.Cmpp_submitSMS(s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17,s18,s19,s20,s21,s22,ref Result);

先用具体的参数直接代如

int submit = API_Class.API_SubmitSMS.Cmpp_submitSMS(s1,3,1,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17,s18,s19,s20,s21,s22,ref Result);
问题应该在unsigned char字段内容不匹配上

热点排行