在VC++中,做一个DLL,其中用到一个ActiveX控件,要怎么办? ( 积分: 100 )

  • 主题发起人 主题发起人 黑星星
  • 开始时间 开始时间

黑星星

Unregistered / Unconfirmed
GUEST, unregistred user!
我建了个MFC DLL工程,然后用建立类向导->Add Class->From a type library,选中这个控件的OCX文件,从中选用到的类,然后加入代码、编译、执行,中间没任何问题,但是得到的结果就是不对,我试了一下,EXE中这么使用也不行,此路不通。
换个方法,建MFC DLL工程之后,加入1个对话框,在里面加入该ActiveX控件,再用建立类向导,然后加入代码、编译、执行,中间没任何问题,如果是EXE就正确,如果是DLL,其他程序调用该DLL,执行到该ActiveX控件就出错:
Debug Assertion Failed!
请问是怎么回事?怎么解决?
 
我建了个MFC DLL工程,然后用建立类向导->Add Class->From a type library,选中这个控件的OCX文件,从中选用到的类,然后加入代码、编译、执行,中间没任何问题,但是得到的结果就是不对,我试了一下,EXE中这么使用也不行,此路不通。
换个方法,建MFC DLL工程之后,加入1个对话框,在里面加入该ActiveX控件,再用建立类向导,然后加入代码、编译、执行,中间没任何问题,如果是EXE就正确,如果是DLL,其他程序调用该DLL,执行到该ActiveX控件就出错:
Debug Assertion Failed!
请问是怎么回事?怎么解决?
 
你需要为它提供一个容器。
 
多谢,我在CSDN也搜索到一些资料,明天试验一下
 
我昨天做了个试验,是可以的。我随便拿个OCX控件。比如消遥表达式求值控件。然后在VC中实现。代码如下:
extern "C&quot
BOOL PASCAL EXPORT TestFun()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
AfxEnableControlContainer()
//不添加此行出错
C_XoYoMathXP test;
CWnd *pwnd;
pwnd = CWnd::FromHandle( ::GetDesktopWindow() );
test.Create(NULL, WS_VISIBLE, CRect(50,50,100,100), pwnd, 0);
BSTR p;
CString aa;
aa = "12-1232";
p = aa.AllocSysString();
AfxMessageBox(test.GetExpressionValue(&p))
//显示运算结果
test.ShowAbout()
//显示控件的关于对话框
return TRUE;
}
 
加了:
AfxEnableControlContainer()
//不添加此行出错
还是不行啊,出错信息没变,具体是:

Debug Assertion Failed!

Program: ...........
File: winocc.cpp
Line: 345
我用的是VC++ 6.0。看了一下winocc.cpp, 里面345行是 :
ASSERT(m_pCtrlSite != NULL)
// not an OLE control (not yet, at least)

说明确实是OLE方面的问题,但是我不知道该怎么办了。
 
嘿嘿,你的分我是要定了。
我建了个MFC DLL工程,然后用建立类向导->Add Class->From a type library;
问题就在上面。
我是:
工程-》添加工程-》Components and controls导入的。
给我个邮箱,发给你。
 
我也希望你能拿分,我的问题能解决就高兴啊,我另外一个帖子,其实是为了同一件事,但是解决方法不同,如果那个帖子你有办法就更好了:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3038998
我的邮箱:
futurepast@163.com
 
按你说的做法我开始就不对,选定部件插入工程时,选了该OCX文件,然后Insert,出错:
The ActiveX Control is not registered properly, or its type library version number is incorrect.
Try registering the control by removing and importing it in the component Gallery.
这个控件我在DELPHI中用的,应该是正确注册了的。
 
我昨天也遇到了这个问题。你用Regsvr32.exe重新注册一下就可以了。
 
先取消注册,然后重新注册,还是一样,应该不是注册的问题。
还有,我现在不是用:建立类向导->Add Class->From a type library 的方法。
而是加入1个对话框,在里面加入该ActiveX控件,再用建立类向导,这时就会自动提示需建立的内容,不需要再选择Add Class。
 
对,你用以上的操作,最后#include就好了。邮件我已经发给你了。但愿对你有帮助。
 
邮件昨天收到,你的程序是可以的,但是我自己想重新做一遍就不行。我是这么做的:
先注册你提供的OCX,
然后新建MFC DLL工程,
选工程->添加工程->Components and Controls,
选中OCX文件,
按Insert按钮,就出错了:
The ActiveX Control is not registered properly, or its type library version number is incorrect.
Try registering the control by removing and importing it in the component Gallery
我的方法有问题吗?还是有其他原因?
 
我想可能是VC的其他问题吧。你可以新建一个对话框,将OCX控件添加到对话框,这个应该没问题的。然后同样它会生成相应的h,cpp文件。再#include就好了。
 
大概是我的VC有问题,结贴了。
 
后退
顶部