這是發的第三帖了,還是大致描述下問題,編譯器為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控制元件和呼叫介面的方法本身有沒有問題的?是不是哪部沒弄好導致的例外?
uj5u.com熱心網友回復:
只是 new 了對話框物件是不夠的,ocx控制元件還沒有創建。uj5u.com熱心網友回復:
我第一次用OCX開發,所以不了解,是不是要呼叫控制元件類中的Create函式去創建控制元件?
uj5u.com熱心網友回復:
你先作為模態對話框顯示, 先把功能實作了再說轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/129727.html
