高手帮帮我啊,救命啊,我都想了一个星期了,没有多少分了,全给了。。。
这是厂家给的DLL文件说明:(是C++的)
VC++:
// 短消息参数结构,编码/解码共用
// 其中,字符串以0结尾
typedef struct {
char SCA[16];// 短消息服务中心号码(SMSC地址)
char TPA[16];// 目标号码或回复号码(TP-DA或TP-RA)
char TP_PID;// 用户信息协议标识(TP-PID)
char TP_DCS;// 用户信息编码方式(TP-DCS)
char TP_SCTS[16];// 服务时间戳字符串(TP_SCTS), 接收时用到
char TP_UD[161];// 原始用户信息(编码前或解码后的TP-UD)
char index;// 短消息序号,在读取时用到
} SM_PARAM;
//接收所有未读新短消息
// sm_param_temp:返回的短消息数组指针
int ReceiveAllMessage(SM_PARAM *sm_param_temp)
C++中调用的程序:
void CSmsExampleDlg::OnReceiveButton()
{
UpdateData(TRUE);
CListCtrl* pListCtrl=(CListCtrl*)GetDlgItem(IDC_LIST1);
SetCursor(LoadCursor(NULL,IDC_WAIT));
pListCtrl->DeleteAllItems();
SM_PARAM *sm_param_temp=new SM_PARAM[30];
int temp=ReceiveAllMessage(sm_param_temp);
int i=0;
while(i<temp)
{
pListCtrl->InsertItem(LVIF_TEXT|LVIF_STATE,i,sm_param_temp->TPA,(i%2)==0?LVIS_SELECTED:0,LVIS_SELECTED,0,0);
pListCtrl->SetItemText(i,1, InvertTime(sm_param_temp->TP_SCTS));
pListCtrl->SetItemText(i,2, sm_param_temp->TP_UD);
sm_param_temp++;
i++;
}
SetCursor(LoadCursor(NULL,IDC_ARROW));
UpdateData(FALSE);
}
我用C#写的结构体是:
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]
public struct SM_PARAM
{
public string SCA; // 短消息服务中心号码(SMSC地址)
public string TPA; // 目标号码或回复号码(TP-DA或TP-RA)
public string TP_PID; // 用户信息协议标识(TP-PID)
public string TP_DCS; // 用户信息编码方式(TP-DCS)
public string TP_SCTS;// 服务时间戳字符串(TP_SCTS), 接收时用到
public string TP_UD; // 原始用户信息(编码前或解码后的TP-UD)
public string index; // 短消息序号,在读取时用到
}
DLL文件函数调用:
[DllImport("smspdu.dll")]
public static extern int ReceiveAllMessage(ref SM_PARAM sm_param_temp);
ICollection CreateDataSource()
{
SM_PARAM[] sm_param_temp=new SM_PARAM[30];
int temp=CmonDem.ReceiveAllMessage(ref sm_param_temp);
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("发送方号码",typeof(string)));
dt.Columns.Add(new DataColumn("发送时间",typeof(string)));
dt.Columns.Add(new DataColumn("发送内容",typeof(string)));
for (int i=0;i<temp;i++)
{
dr = dt.NewRow();
dr[0]=sm_param_temp[i].TPA;
dr[1]=sm_param_temp[i].TP_SCTS;
dr[2]=sm_param_temp[i].TP_UD;
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
return dv;
}
private void btnShowPart_Click(object sender, System.EventArgs e)
{
SM_PARAM[] sm_param_temp=new SM_PARAM[30];
int temp=CmonDem.ReceiveAllMessage(ref sm_param_temp);
if(temp>0)
{
dgInfo.DataSource=CreateDataSource();
}
}
我做的就是读不出结构体SM_PARAM中的变量的值,希望各位能帮我,谢谢!