Automation 如何使用MFC加载自动化类

Automation 如何使用MFC加载自动化类,automation,mfc,com,Automation,Mfc,Com,我想用MFC项目加载应用程序的类,并将它们用于软件自动化。项目类型是MFC应用程序。我的编译器是visual studio 2012。我从typelib向导加载了类。我的全部代码是: 我的代码是: #include "stdafx.h" #include "MFCApplication1.h" #include "CGPNSApplicationDisp.h" #include "ChildFrm.h" #include <iostream> #include <string&

我想用MFC项目加载应用程序的类,并将它们用于软件自动化。项目类型是MFC应用程序。我的编译器是visual studio 2012。我从typelib向导加载了类。我的全部代码是:

我的代码是:

#include "stdafx.h"
#include "MFCApplication1.h"
#include "CGPNSApplicationDisp.h"
#include "ChildFrm.h"
#include <iostream>
#include <string>

 void CChildFrame::AssertValid() const
    {

CLSID clsid;
LPDISPATCH pWMPDispatch = NULL;
::CLSIDFromProgID(OLESTR("SGNSAutomation.SGNSApplication"), &clsid);
IID iid;
HRESULT hr = CoCreateInstance(clsid, NULL, CLSCTX_ALL, 
  IID_IDispatch, (LPVOID*)&pWMPDispatch);//creating base class of application
  CGPNSApplicationDisp *GPNSApplication1;
 hr=pWMPDispatch->QueryInterface(__uuidof(IGPNSApplicationDisp), 
  (void**)&GPNSApplication1);
 LPDISPATCH  myNet = NULL;
 myNet=GPNSApplication1->addSimulationCase();//error occured here
 ISimulationCaseDisp* mysym= NULL;
 mysym=GPNSApplication1->openCase(myfile.c_str());*/
 CMDIChildWndEx::AssertValid();
#包括“stdafx.h”
#包括“MFCAPapplication1.h”
#包括“CGPNSApplicationDisp.h”
#包括“ChildFrm.h”
#包括
#包括
void CChildFrame::AssertValid()常量
{
CLSID-CLSID;
LPDISPATCH pWMPDispatch=NULL;
::CLSIDFromProgID(OLESTR(“SGNSAutomation.SGNSApplication”),&clsid);
IID IID;
HRESULT hr=CoCreateInstance(clsid,NULL,CLSCTX_ALL,
IID_IDispatch,(LPVOID*)&pWMPDispatch);//创建应用程序的基类
CGPNA应用程序显示*GPN应用程序1;
hr=pWMPDispatch->查询接口,
(无效**)和GPN应用程序1);
LPDISPATCH myNet=NULL;
myNet=GPNSApplication1->addSimulationCase();//此处发生错误
ISimulationCaseDisp*mysym=NULL;
mysym=GPNSApplication1->openCase(myfile.c_str())*/
CMDIChildWndEx::AssertValid();
}

CGPNSApplicaionDisp的方法列表: addSimulationCase() getSimulationCase(文件路径) 导入库(文件路径) openCase(文件路径)

程序要在oledisp2.cpp中调用此方法时出错 行中: SCODE sc=m_lpDispatch->Invoke(dwDispID,IID_NULL,0,wFlags, &dispparams、pvarResult、excepInfo和Narger); 错误是MFCAPApplication1.exe中0x0FB3F03A(mfc110ud.dll)处的未处理异常:0xC0000005:访问冲突读取位置0x00000002。 我不是MFC项目和COM接口的专业人士。 请帮帮我。
谢谢。

您正在定义一个指针(
GPNSApplication1
),为它分配一个
nullptr
,然后取消对它的引用。您难道没有想到会得到与空指针异常道德等价的结果吗?如果是的话,为什么?你能帮我定义一下吗?如果我不分配nullptr,则会发生未初始化错误。我定义了指针CGPNSApplicationDisp*GPNSApplication1=new CGPNSApplicationDisp();我的问题已解决,但GPNSApplication1->addSimulationCase()返回0xCCCC如何解决此问题?根据提供的信息,我们只能断定您做错了。如果您想了解更多的实质性信息,请提供一份详细的说明,包括一份适当的问题陈述。@mahdiLotfi:这几乎肯定是您的DISPPARAMS的问题。正如@IInspectable所说,我们需要更多地查看您的代码。您提供的代码有一个明显的问题(
GPNSApplication1
从未设置为任何值),但听起来您正在使用的代码不是您发布的代码。