int SendParamter( char *saleOrder)
{
ns2__MBFRequestHeader header; //定义 header
ns3__ivrQueryDeliveryinfosaleOrderNo saleOrderNo; //
ns3__ivrQueryDeliveryinfoRequestBody body; //定义 body
ns3__ivrQueryDeliveryinfoRequest request; //定义 request
ns3__ivrQueryDeliveryinfodeliveryInfo deliveryInfo; //定义 serviceInfo SOA返回详细信息
ns3__ivrQueryDeliveryinfoResponse response; //定义 response
_ns3__ivrQueryDeliveryinfo soapinput; //定义 soap输入信息
_ns3__ivrQueryDeliveryinfoResponse soapoutput; //定义 soap输出信息
//初始化soap
struct soap soap;
soap_init ( &soap );
const char* server = "http://192.168.1.53:9996/ServiceWeb/mb"; //服务器URL
//给输入变量赋值
header.MBServiceCode = "MBF_IVR_QUERY_DELIVERYINFO"; //-0-
//saleOrderNo = **body.saleOrderNo;
char *low = new char[256];
saleOrderNo.low = saleOrder; //-1-IVR收销售订单号,送至SOA //将传入值赋给传递参数项,两边皆是char *.
//body.saleOrderNo = &saleOrderNo.low; //将char* low的内存地址上字符拷贝给TYPE_SON **
request.MbfHeader = &header;
request.MbfBody = &body;
soapinput.input1 = &request; //输出项--记录到DBtable
char *deliveryNo = new char[256]; //-4-SOA返回交货单号
//调用Webservice
if(soap_call___ns1__ivrQueryDeliveryinfo(&soap,server,NULL,&soapinput,&soapoutput) == SOAP_OK)
{
//........int main(int argc, char* argv[])
{
int iThread = 0;
cout<<"输入启动线程数:";
cin>>iThread;
for (int i=0; i<iThread; i++)
{
_beginthreadex(NULL, 0, ReadDatabaseThread, NULL, 0, NULL);
} while(k<iThread)
{
Sleep(4000);
}
return 0;
}
//soapStub.h
class SOAP_CMAC ns3__ivrQueryDeliveryinfoRequestBody
{
public:
int __sizesaleOrderNo; /* sequence of elements <saleOrderNo> */
ns3__ivrQueryDeliveryinfosaleOrderNo **saleOrderNo; /* optional element of type ns3:ivrQueryDeliveryinfosaleOrderNo */
struct soap *soap; /* transient */
//..........
class SOAP_CMAC ns3__ivrQueryDeliveryinfosaleOrderNo
{
public:
char *low; /* optional element of type xsd:string */
struct soap *soap; /* transient */
这里面,saleOrderNo.low获取到了传递进去的saleOrder,但是源码里不知道是否没有将这个值传给body~
求教该如何解决~
对**跟&一直很晕b
可能我写的SendParamter(char *saleOrder )就不太对。
不知道该如何将这个传给low.
int SendParamter( char *saleOrder) {
//......
return 0;
}int k = 0;unsigned int __stdcall ReadDatabaseThread(void *param)
{
for (int i=0; i<10; i++)
{
SendParamter("200004294");
}
k++;
return 0;
}int main(int argc, char* argv[])
{
int iThread = 0;
cout<<"输入启动线程数:";
cin>>iThread;
for (int i=0; i<iThread; i++)
{
_beginthreadex(NULL, 0, ReadDatabaseThread, NULL, 0, NULL);
}
while(k<iThread)
{
Sleep(4000);
}
return 0;
}
header.MBServiceCode = "MBF_IVR_QUERY_DELIVERYINFO";
char *low = new char[256];
strcpy(low,saleOrder);
saleOrderNo.low = low
body.saleOrderNo = (ns3__ivrQueryDeliveryinfosaleOrderNo **)&saleOrderNo; request.MbfHeader = &header;
request.MbfBody = &body;
soapinput.input1 = &request;其实不论是否用new,调试过程,地址传递到强制转换之后就对应不上了。
以上调试|- request {...}
|- MbfBody 0x0090fedc
|- saleOrderNo 0x0090feec
|- 0x004dc348 const ns3__ivrQueryDeliveryinfosaleOrderNo::`vftable'
+ __vfptr 0x0040100f ns3__ivrQueryDeliveryinfosaleOrderNo::soap_type(void)
+ low 0x00401bcc "開y"
+ soap 0x0040106e ns3__ivrQueryDeliveryinfosaleOrderNo::soap_serialize(struct soap *)
不知为何saleOrderNo之下多了一个层级。按理saleOrderNo之下就直接使__vfptr、low和soap了。不论强制转换**)&saleOrderN还是**)&saleOrderNo.low(后者在多出的 层级下又有 一个 __vfptr、low和soap结构)
THX EVERYBODY :)