#include <stdio.h>#import "c:\Program Files\Common Files\MSSoap\Binaries\mssoap30.dll" raw_interfaces_only, exclude("IStream", "ISequentialStream", "_LARGE_INTEGER", "_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME", "IErrorInfo")
using namespace MSSOAPLib30; //soap的dll 
int main(int argc, char* argv[])
{
 CoInitialize(NULL);
 _variant_t result;
 DISPID dispidFn=0;
 
 HRESULT hr;
 ISoapClientPtr pSoapClient;
 pSoapClient=ISoapClientPtr(__uuidof(SoapClient30));
 
 long lValue=10;
 try
 {
  //连接soap站点
  hr=pSoapClient->MSSoapInit(_bstr_t("http://192.168.0.10/SoapTest/SoapTest.WSDL"),
   _bstr_t("SoapTest"),_bstr_t("GetTimeSoapPort"),_bstr_t("http://192.168.0.10/SoapTest/SoapTest.WSML"));
    if(FAILED(hr))
  {
   printf("MSSoapInit 失败\r\n");
   _com_issue_error(hr);
  }  LPOLESTR pServiceName = L"GetTemp"; //得到Com中的GetTemp的方法ID
  hr = pSoapClient->GetIDsOfNames(IID_NULL, &pServiceName, 1,
   LOCALE_SYSTEM_DEFAULT, &dispidFn);
  if(FAILED(hr))
  {
   printf("GetIDsOfNames 失败\r\n");
  }
  else
  {
    TCHAR strData[126]={0};
    VARIANTARG args[1];
   args[0].vt = VT_BSTR;
  // wsprintf(strData,"test");
   args[0].bstrVal = _bstr_t("test"); //传的参数 既BSTR Url ,如果有多个参数 那args[]就是传的参数的数组
   EXCEPINFO excepinfo={0};
//DISPPARAMS params = { args, NULL, 1, 0 };
   DISPPARAMS params;
   params.cArgs = 1;
   params.rgvarg= args;
params.cNamedArgs=0;
   VARIANT  result;  //返回的是BSTR *Return 即"jones"
   VariantInit(&result);
   UINT uArgErr=0;
   //调用GetTemp的方法
   hr=pSoapClient->Invoke(dispidFn, IID_NULL, LOCALE_SYSTEM_DEFAULT, 
     DISPATCH_METHOD, &params, &result, &excepinfo, NULL);

   if(FAILED(hr))
   {
    printf("Invoke 失败\r\n");
    _com_issue_error(hr);
   }
   else
   {
    params.rgvarg[0].plVal;
   }
  }
 }
 catch(_com_error& e)
 {
  TCHAR str[205]={0};
  wsprintf(str,"%s,%s,%s,%d",e.Source(),e.Description(),
   e.ErrorMessage(),e.Error());
  
 }
 CoUninitialize();
 return 0;
}