调用一个C++写的DLL。里面很多不同的数据类型和指针的应用具体的函数如下
C++的函数原型:int __stdcall GetDeliverSMExExEx
(
ULONG* sm_ID, //返回:短讯ID
unsigned char* DestTON, //返回:目标地址号码类型
unsigned char* DestNPI, //返回:目标地址编码方案
char* DestAddr, //返回:目标地址
unsigned char* OrgTON, //返回:源地址号码类型
unsigned char* OrgNPI, //返回:源地址编码方案
char* OrgAddr, //返回:源地址
unsigned char* PRI, //返回:优先权
unsigned char* RP, //返回:
unsigned char* UDHI, //返回:
unsigned char* PID, //返回:协议类型
unsigned char* DCS, //返回:编码方案
char* TimeStamp, //返回:下发时间
unsigned long * UDLen,
char* UserData, //返回:用户数据
unsigned char* StatusReport, //返回:状态报告标志(0上行,1状态报告,2无信息)
unsigned char* sMsgID, //返回:发送流水号与SubmitAExEx函数对应
char* sSubmitdate, //返回
char* sDonedate, //返回:发送流水号与SubmitAExEx函数对应
char* sStatus, //返回:状态报告对应的错误码
int iDeliverAckResult //应答错误码
)
我把对应的类型查表转换后如下:
function GetDeliverSMExExEx
(
sm_ID:DWORD; //返回:短讯ID
DestTON:PUchar; //返回:目标地址号码类型
DestNPI:PUchar; //返回:目标地址编码方案
DestAddr:PChar; //返回:目标地址
OrgTON:PUchar; //返回:源地址号码类型
OrgNPI:PUchar; //返回:源地址编码方案
OrgAddr:PChar; //返回:源地址
PRI:PUchar; //返回:优先权
RP: PUchar; //返回:
UDHI:PUchar; //返回:
PID:PUchar; //返回:协议类型
DCS:PUchar; //返回:编码方案
TimeStamp:PChar; //返回:下发时间
UDLen:DWORD;
UserData:PChar; //返回:用户数据
StatusReport:PUchar; //返回:状态报告标志(0上行,1状态报告,2无信息)
sMsgID:PUchar; //返回:发送流水号与SubmitAExEx函数对应
sSubmitdate:PChar; //返回
sDonedate:PChar; //返回:发送流水号与SubmitAExEx函数对应
sStatus:PChar; //返回:状态报告对应的错误码
iDeliverAckResult:integer //应答错误码
):integer;stdcall;external 'SMEIDll.dll'; 这里编译通过没有问题,即便是错的也应是会通过的,所以不知是不是全部对了
对方还是用C++调用的实例如下:
iRet = GetDeliverSMExExEx(&ulsm_ID, &byDestTON, &byDestNPI, sDestAddr,
&byOrgTON, &byOrgNPI, sOrgAddr, &byPRI, &byRP, &byUDHI, &byPID,
&byDCS, sTimeStamp, &ulUDLen, sUserData, &byStatusReport,
sMsgID, sSubmitdate, sDonedate, sStatus, iDeliverAckResult);
if (iRet == 0) { //调用成功
这里&应当是对应delphi中@的,取的变量指针地址,但是替换掉,却编译不过,本人对于数据类很菜,所以在此请教了我改的如下: iRet = GetDeliverSMExExEx(@ulsm_ID, @byDestTON, @byDestNPI, sDestAddr,
@byOrgTON, @byOrgNPI, sOrgAddr, @byPRI, @byRP, @byUDHI, @byPID,
@byDCS, sTimeStamp,@ulUDLen, sUserData, @byStatusReport,
sMsgID, sSubmitdate, sDonedate, sStatus, iDeliverAckResult);
if (iRet == 0) { //调用成功
以上急待解决,急!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C++的函数原型:int __stdcall GetDeliverSMExExEx
(
ULONG* sm_ID, //返回:短讯ID
unsigned char* DestTON, //返回:目标地址号码类型
unsigned char* DestNPI, //返回:目标地址编码方案
char* DestAddr, //返回:目标地址
unsigned char* OrgTON, //返回:源地址号码类型
unsigned char* OrgNPI, //返回:源地址编码方案
char* OrgAddr, //返回:源地址
unsigned char* PRI, //返回:优先权
unsigned char* RP, //返回:
unsigned char* UDHI, //返回:
unsigned char* PID, //返回:协议类型
unsigned char* DCS, //返回:编码方案
char* TimeStamp, //返回:下发时间
unsigned long * UDLen,
char* UserData, //返回:用户数据
unsigned char* StatusReport, //返回:状态报告标志(0上行,1状态报告,2无信息)
unsigned char* sMsgID, //返回:发送流水号与SubmitAExEx函数对应
char* sSubmitdate, //返回
char* sDonedate, //返回:发送流水号与SubmitAExEx函数对应
char* sStatus, //返回:状态报告对应的错误码
int iDeliverAckResult //应答错误码
)
我把对应的类型查表转换后如下:
function GetDeliverSMExExEx
(
sm_ID:DWORD; //返回:短讯ID
DestTON:PUchar; //返回:目标地址号码类型
DestNPI:PUchar; //返回:目标地址编码方案
DestAddr:PChar; //返回:目标地址
OrgTON:PUchar; //返回:源地址号码类型
OrgNPI:PUchar; //返回:源地址编码方案
OrgAddr:PChar; //返回:源地址
PRI:PUchar; //返回:优先权
RP: PUchar; //返回:
UDHI:PUchar; //返回:
PID:PUchar; //返回:协议类型
DCS:PUchar; //返回:编码方案
TimeStamp:PChar; //返回:下发时间
UDLen:DWORD;
UserData:PChar; //返回:用户数据
StatusReport:PUchar; //返回:状态报告标志(0上行,1状态报告,2无信息)
sMsgID:PUchar; //返回:发送流水号与SubmitAExEx函数对应
sSubmitdate:PChar; //返回
sDonedate:PChar; //返回:发送流水号与SubmitAExEx函数对应
sStatus:PChar; //返回:状态报告对应的错误码
iDeliverAckResult:integer //应答错误码
):integer;stdcall;external 'SMEIDll.dll'; 这里编译通过没有问题,即便是错的也应是会通过的,所以不知是不是全部对了
对方还是用C++调用的实例如下:
iRet = GetDeliverSMExExEx(&ulsm_ID, &byDestTON, &byDestNPI, sDestAddr,
&byOrgTON, &byOrgNPI, sOrgAddr, &byPRI, &byRP, &byUDHI, &byPID,
&byDCS, sTimeStamp, &ulUDLen, sUserData, &byStatusReport,
sMsgID, sSubmitdate, sDonedate, sStatus, iDeliverAckResult);
if (iRet == 0) { //调用成功
这里&应当是对应delphi中@的,取的变量指针地址,但是替换掉,却编译不过,本人对于数据类很菜,所以在此请教了我改的如下: iRet = GetDeliverSMExExEx(@ulsm_ID, @byDestTON, @byDestNPI, sDestAddr,
@byOrgTON, @byOrgNPI, sOrgAddr, @byPRI, @byRP, @byUDHI, @byPID,
@byDCS, sTimeStamp,@ulUDLen, sUserData, @byStatusReport,
sMsgID, sSubmitdate, sDonedate, sStatus, iDeliverAckResult);
if (iRet == 0) { //调用成功
以上急待解决,急!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
(
var sm_ID:DWORD; //返回:短讯ID
var DestTON:UINT; //返回:目标地址号码类型
var DestNPI:UINT; //返回:目标地址编码方案
DestAddr:PChar; //返回:目标地址
var OrgTON:UINT; //返回:源地址号码类型
var OrgNPI:UINT; //返回:源地址编码方案
OrgAddr:PChar; //返回:源地址
var PRI:UINT; //返回:优先权
var RP: UINT; //返回:
var UDHI:UINT; //返回:
var PID:UINT; //返回:协议类型
var DCS:UINT; //返回:编码方案
TimeStamp:PChar; //返回:下发时间
var UDLen:DWORD;
UserData:PChar; //返回:用户数据
var StatusReport:UINT; //返回:状态报告标志(0上行,1状态报告,2无信息)
var sMsgID:UINT; //返回:发送流水号与SubmitAExEx函数对应
sSubmitdate:PChar; //返回
sDonedate:PChar; //返回:发送流水号与SubmitAExEx函数对应
sStatus:PChar; //返回:状态报告对应的错误码
iDeliverAckResult:integer //应答错误码
):integer;stdcall;external 'SMEIDll.dll';
//PChar变量都用char数组创建空间
char[256] sDestAddr;
...
iRet = GetDeliverSMExExEx(ulsm_ID, byDestTON, byDestNPI, sDestAddr,
byOrgTON, byOrgNPI, sOrgAddr, byPRI, byRP, byUDHI, byPID,
byDCS, sTimeStamp, ulUDLen, sUserData, byStatusReport,
sMsgID, sSubmitdate, sDonedate, sStatus, iDeliverAckResult);
PUchar改为PByte似乎更大众化一点。
(
sm_ID:^DWORD; //返回:短讯ID
DestTON:PByte; //返回:目标地址号码类型
DestNPI:PByte; //返回:目标地址编码方案
DestAddr:PByte; //返回:目标地址
OrgTON:PByte; //返回:源地址号码类型
OrgNPI:PByte; //返回:源地址编码方案
OrgAddr:PChar; //返回:源地址
PRI:PByte; //返回:优先权
RP: PByte; //返回:
UDHI:PByte; //返回:
PID:PByte; //返回:协议类型
DCS:PByte; //返回:编码方案
TimeStamp:PChar; //返回:下发时间
UDLen:^DWORD;
UserData:PChar; //返回:用户数据
StatusReport:PByte; //返回:状态报告标志(0上行,1状态报告,2无信息)
sMsgID:PByte; //返回:发送流水号与SubmitAExEx函数对应
sSubmitdate:PByte; //返回
sDonedate:PChar; //返回:发送流水号与SubmitAExEx函数对应
sStatus:PChar; //返回:状态报告对应的错误码
iDeliverAckResult:integer //应答错误码
):integer;stdcall;external 'SMEIDll.dll';ULONG * 在C++中是一个指针
iRet = GetDeliverSMExExEx(&ulsm_ID, &byDestTON, &byDestNPI, sDestAddr,
&byOrgTON, &byOrgNPI, sOrgAddr, &byPRI, &byRP, &byUDHI, &byPID,
&byDCS, sTimeStamp, &ulUDLen, sUserData, &byStatusReport,
sMsgID, sSubmitdate, sDonedate, sStatus, iDeliverAckResult);
if (iRet == 0) { MsgStr=userData}//这样得到实参,有点像过程了,