还是加载OCX控件的问题

YKlmc 2016-08-04 05:32:37
这是发的第三帖了,还是大致描述下问题,编译器为VS2015:
我需要开发一个采集数据的驱动DLL,所以最初采用的是新建DLL项目,#import“XX.OCX”组件的方法,CoCreateInstance成功,但是一调用接口就报异常,考虑到可能是OCX控件的方法依赖MFC的缘故,故放弃
现在新建的是MFC DLL的工程,添加了一个对话框,类名为ContainerDlg,在选中对话框->右键选择插入ActiveX控件,添加完控件后,再选中控件->右键选择添加变量,编译器自动生成控件类CDctlctrl1 ,并且在父对话框中ContainerDlg自动添加了变量dctl
以下是父对话框的头文件代码
// ContainerDlg 对话框

class ContainerDlg : public CDialog
{
DECLARE_DYNAMIC(ContainerDlg)

public:
ContainerDlg(CWnd* pParent = NULL); // 标准构造函数
virtual ~ContainerDlg();

// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_DIALOG1 };
#endif

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

DECLARE_MESSAGE_MAP()
public:
CDctlctrl1 dctl; //生成的控件对象
};

以下是控件的类代码
class CDctlctrl1 : public CWnd
{
protected:
DECLARE_DYNCREATE(CDctlctrl1)
public:
CLSID const& GetClsid()
{
static CLSID const clsid
= { 0x22842328, 0x3FCE, 0x11D1, { 0x9B, 0x93, 0x0, 0x20, 0xAF, 0x52, 0x4F, 0xA5 } };
return clsid;
}
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID,
CCreateContext* pContext = NULL)
{
return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID);
}

BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd,
UINT nID, CFile* pPersist = NULL, BOOL bStorage = FALSE,
BSTR bstrLicKey = NULL)
{
return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,
pPersist, bStorage, bstrLicKey);
}

// 特性
//以为枚举和接口代码,只贴出了一个
long GetLastError()
{
long result;
GetProperty(0xa, VT_I4, (void*)&result);
return result;
}

然后我自己还定义了一个驱动操作类Driver,在Driver定义了对话框指针对象containerdlg,并且构造函数中new了一下,
然后Driver类的Openlink函数去调用控件的接口函数,如下
BOOL Driver::OpenLink()
{
CString str = "DDeserver";
CString str1 = containerdlg->dctl.GetLinkTopic();//函数能调用成功,但是函数执行中返回异常返回异常
return 0;
}

以下函数是控件接口出现异常的代码
CString GetLinkTopic()
{
CString result;
GetProperty(0x3, VT_BSTR, (void*)&result);//每次这个地方报Debug Assertion Failed的异常
return result;
}

当然这种异常也可能是我的开发环境导致的。由于是第一次用控件开发,所以我主要想问下我这种加载OCX控件和调用接口的方法本身有没有问题的?是不是哪部没弄好导致的异常?
...全文
1056 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dobzhansky 2016-08-04
  • 打赏
  • 举报
回复
你先作为模态对话框显示, 先把功能实现了再说
YKlmc 2016-08-04
  • 打赏
  • 举报
回复
引用 1 楼 Dobzhansky 的回复:
只是 new 了对话框对象是不够的,ocx控件还没有创建。
我第一次用OCX开发,所以不了解,是不是要调用控件类中的Create函数去创建控件?
Dobzhansky 2016-08-04
  • 打赏
  • 举报
回复
只是 new 了对话框对象是不够的,ocx控件还没有创建。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧