我写了个小程序链接一个soap的服务器,#import了微软的SoapToolKit提供的COM DLL。代码如下:// testsoap.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
#include<windows.h>
#pragma warning(disable:4192)
#import "C:\Program Files\Common Files\MSSoap\Binaries\MSSOAP1.dll" \
    exclude("IStream","ISequentialStream","_LARGE_INTEGER", \
    "_ULARGE_INTERGER","tagSTATSTG","_FILETIME")
using namespace MSSOAPLib;
using namespace std;int _tmain(int argc, _TCHAR* argv[])
{
    CoInitialize(NULL);
    ISoapConnectorPtr Connector;
    Connector.CreateInstance(__uuidof(HttpConnector));
    Connector->Property["EndPointURL"]="http://www.allesta.net:51110/webservices/soapx4/isuseronline.php";
    Connector->Connect();
    Connector->Property["SoapAction"]="uri:allesta-YahooUserPing";
    Connector->BeginMessage();    ISoapSerializerPtr Serializer;
    Serializer.CreateInstance(__uuidof(SoapSerializer));
    Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));
    Serializer->startEnvelope("","","");    Serializer->startBody("");
    Serializer->startElement("isuseronline","uri:allesta-YahooUserPing","","m");
    Serializer->startElement("username","","","");
    Serializer->writeString("laghari78");
    Serializer->endElement();
    Serializer->endElement();
    Serializer->endBody();
    Serializer->endEnvelope();
    Connector->EndMessage();
 
    ISoapReaderPtr Reader;
    Reader.CreateInstance(__uuidof(SoapReader));
    /*Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), "");
    _bstr_t bVal;
    Reader->RPCResult->get_text(bVal.GetAddress());
    printf("Answer: %s\n", (const char *)_com_util::ConvertBSTRToString(bVal));*/    CoUninitialize();
return 0;
}
运行,卡在Connect()那儿,然后弹出红色的叉叉框显示:
Debug Error!
Program.....This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

解决方案 »

  1.   

    应该是 EndPointURL里面填的那个地址有误了
      

  2.   

    而且没作任何设置。。要说不同,就是int main(int argc, TCHAR* argv[])这里不同
      

  3.   

    try catch  看看 
      

  4.   

    你用的是什么IDE?
    我是VC2005 sp1,在xp sp3上。难道是开发环境的不同?
      

  5.   


    我又用VC2010 sp1测试了一下,一样的错误,就是红框里面的字不一样:R6010
    -abort() has been called.