CComPtr<ISoapClient> spSOAPClient;
HRESULT hr = spSOAPClient.CoCreateInstance(MSSOAPLib30::CLSID_SoapClient30);
CHECK_HR(hr); hr = spSOAPClient->MSSoapInit(
_bstr_t("http://localhost/MyWebService/MyWebService.wsdl"),
_bstr_t("MyWebService"),
_bstr_t("MyEEESoapPort"),
_bstr_t("http://localhost/MyWebService/MyWebService.wsml")
);
CHECK_HR(hr);
WCHAR *pwcMethodName = L"test1";
//DISPID mydispid
DISPID dispidFn1 = 0;
hr = spSOAPClient->GetIDsOfNames(IID_NULL, &pwcMethodName, 1,
GetUserDefaultLCID(), &dispidFn1);
CHECK_HR(hr);
DISPPARAMS params = {NULL, NULL, 0, 0};
unsigned int uArgErr = -1;
_variant_t result;
EXCEPINFO excepInfo;
memset(&excepInfo, 0, sizeof(excepInfo));
hr = spSOAPClient->Invoke(
dispidFn1,
IID_NULL, GetUserDefaultLCID(), DISPATCH_METHOD,
¶ms,
&result,
&excepInfo,
&uArgErr); if (FAILED(hr)) {
if(hr = DISP_E_EXCEPTION)
AfxMessageBox("ERROR");
exit(0);
return; }
反正程序调用invoke时候就错了描述:
ATL写了一个COM组件, 有一个test函数 ,但无参数
使用WSDLGen产生WSDL, WSML文件请问我的程序错在哪里, 为什么执行到invoke就出错.
谢谢各位,
up有分
HRESULT hr = spSOAPClient.CoCreateInstance(MSSOAPLib30::CLSID_SoapClient30);
CHECK_HR(hr); hr = spSOAPClient->MSSoapInit(
_bstr_t("http://localhost/MyWebService/MyWebService.wsdl"),
_bstr_t("MyWebService"),
_bstr_t("MyEEESoapPort"),
_bstr_t("http://localhost/MyWebService/MyWebService.wsml")
);
CHECK_HR(hr);
WCHAR *pwcMethodName = L"test1";
//DISPID mydispid
DISPID dispidFn1 = 0;
hr = spSOAPClient->GetIDsOfNames(IID_NULL, &pwcMethodName, 1,
GetUserDefaultLCID(), &dispidFn1);
CHECK_HR(hr);
DISPPARAMS params = {NULL, NULL, 0, 0};
unsigned int uArgErr = -1;
_variant_t result;
EXCEPINFO excepInfo;
memset(&excepInfo, 0, sizeof(excepInfo));
hr = spSOAPClient->Invoke(
dispidFn1,
IID_NULL, GetUserDefaultLCID(), DISPATCH_METHOD,
¶ms,
&result,
&excepInfo,
&uArgErr); if (FAILED(hr)) {
if(hr = DISP_E_EXCEPTION)
AfxMessageBox("ERROR");
exit(0);
return; }
反正程序调用invoke时候就错了描述:
ATL写了一个COM组件, 有一个test函数 ,但无参数
使用WSDLGen产生WSDL, WSML文件请问我的程序错在哪里, 为什么执行到invoke就出错.
谢谢各位,
up有分
我新创建了一个win32 application,然后在stdafx.h中加入了
#import "msxml4.dll"
using namespace MSXML2;#import "C:\Program Files\Common Files\MSSoap\Binaries\mssoap30.dll" exclude("IStream", "IErrorInfo", "ISequentialStream", "_LARGE_INTEGER", "_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME")
using namespace MSSOAPLib30;
然后在test.cpp里
#include "stdafx.h"int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
CoInitialize(NULL);
HRESULT hr;
ISOAPClient m_pSoapClient = NULL; if (m_pSoapClient != NULL) m_pSoapClient.Release();
hr = m_pSoapClient.CreateInstance(__uuidof(SoapClient));
if(FAILED(hr))
{
MessageBox(NULL,TEXT("Cannot create SoapClient."), NULL,MB_OK);
return false;
}
try
{
m_pSoapClient->mssoapinit((LPCTSTR)TEXT("http://zym/TempConvert1/Service1.asmx?wsdl"), _T(""), _T(""), _T(""));
}
catch(_com_error err)
{
MessageBox(NULL,TEXT("Cannot initialize SoapClient."), NULL,MB_OK);
return false;
} CoUninitialize();
return 0;
}但我这报error C2065: 'ISOAPClient' : undeclared identifier,为什么?
我该加入些头文件?还是要copy一些文件到我应用程序目录下?!在线等待!
现在我改成
MSSOAPLib30::ISoapClientPtr m_pSoapClient = NULL; if (m_pSoapClient != NULL) m_pSoapClient.Release();
hr = m_pSoapClient.CreateInstance(__uuidof(MSSOAPLib30::CLSID_SoapClient30));
发现MSSOAPLib30没有CLSID_SoapClient30这个成员?为什么?
能否在线请教?
不过我的代码是基于对话框的.
在dlg.h 声明 ISoapClientPtr m_pSoapClient;
HRESULT hr = m_pSoapClient.CreateInstance(__uuidof(SoapClient30));
CHECK_HR(hr);
CString Path;
GetModuleFileName(AfxGetApp()->m_hInstance, Path.GetBuffer(_MAX_PATH), _MAX_PATH);
Path.ReleaseBuffer();
Path = Path.Left(Path.ReverseFind(_T('\\'))+1);
CString WsdlFile = Path + _T("MyWebService.wsdl"); m_pSoapClient->MSSoapInit2(
_variant_t(WsdlFile),
_T(""),
_T("MyWebService"),
_T("MyWebServiceSoapPort"),
_T("http://tempuri.org/MyWebService/wsdl/")
);
CHECK_HR(hr);
WCHAR *pwcMethodName = L"Add";
//DISPID mydispid
DISPID dispidFn1 = 0;
hr = m_pSoapClient->GetIDsOfNames(IID_NULL, &pwcMethodName, 1,
LOCALE_SYSTEM_DEFAULT, &dispidFn1);
CHECK_HR(hr);
DISPPARAMS dispparams;
VARIANTARG params[2];
VARIANT result;
CString ParamText;
EXCEPINFO ExceptInfo;
VariantInit(¶ms[0]);
params[0].vt = VT_BSTR;
// m_BCtl.GetWindowText(ParamText);
ParamText = "10";
params[0].bstrVal = ParamText.AllocSysString();
hr = VariantChangeType(¶ms[0], ¶ms[0], 0, VT_R8);
CHECK_HR(hr);
// Set A parameter.
VariantInit(¶ms[1]);
params[1].vt = VT_BSTR;
// m_ACtl.GetWindowText(ParamText);
ParamText = "5";
params[1].bstrVal = ParamText.AllocSysString();
hr = VariantChangeType(¶ms[1], ¶ms[1], 0, VT_R8); CHECK_HR(hr);
// Initialize DISPPARAMS structure.
dispparams.cArgs = 2;
dispparams.cNamedArgs = 0;
dispparams.rgdispidNamedArgs = NULL;
dispparams.rgvarg = params;
// Prepare result variant.
VariantInit(&result);
hr = m_pSoapClient->Invoke(
dispidFn1,
IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD,
&dispparams,
&result,
&ExceptInfo,
NULL);
CHECK_HR(hr);
// Clean up variants.
VariantClear(&result);
VariantClear(¶ms[0]);
VariantClear(¶ms[1]);
class CProxy_IHisDialEvents : public IConnectionPointImpl<T, &DIID__IHisDialEvents, CComDynamicUnkArray>
{
//Warning this class may be recreated by the wizard.
public:
HRESULT Fire_OnDialStatus()
{
CComVariant varResult;
T* pT = static_cast<T*>(this);
int nConnectionIndex;
CComVariant* pvars = new CComVariant[1];
int nConnections = m_vec.GetSize();
OLECHAR FAR *szMember;
szMember = OLESTR("OnDialStatus");
for (nConnectionIndex = 0; nConnectionIndex < nConnections; nConnectionIndex++)
{
pT->Lock();
CComPtr<IUnknown> sp = m_vec.GetAt(nConnectionIndex);
pT->Unlock();
IDispatch* pDispatch = reinterpret_cast<IDispatch*>(sp.p);
DISPID dpid;
if (pDispatch != NULL)
{
pDispatch->GetIDsOfNames(IID_NULL,&szMember,1,LOCALE_USER_DEFAULT,&dpid);
VariantClear(&varResult);
//pvars[0] = lArg;
//这里产生异常?????
//我的也是这个问题
//Invoke()....
DISPPARAMS disp = { NULL, NULL, 0, 0 };
pDispatch->Invoke(dpid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, &varResult, NULL, NULL);
}
}
delete[] pvars;
return varResult.scode;
}
};
------------------------------------------------------
Microsoft Visual C++
---------------------------
Unhandled exception in RasComTest.exe (MSVBVM60.DLL): 0xC0000005: Access Violation.
---------------------------
确定
---------------------------
IIS要加一个配置*.wsdl,
算了. ......郁闷
你们两个1人25, 结帖