ocx控件注册问题

时间:2022-12-07 03:40:06
自己编写的ocx控件,ocx控件中引用了别人写的lib库,结果控件注册总出现如下问题:

“Debug Assertion Failed!

Program: C:\Windows\system32\regsvr32.exe
File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dllinit.cpp
Line: 587

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)”


请大牛们指点~~~~先撒花感谢~~~~

58 个解决方案

#1


自己先顶一下~~

#2


先拿depends导入下看看是不是缺少依赖

#3


ocx控件注册问题

#4


这个是我depends的,应该怎么处理呢?
新手上路,烦大牛指点~~
不胜感激~~
撒花感谢~~

#5


先把我的最终目标说一下,我现在想要把自己做的视频播放器嵌入到网页中播放。

我现在的做法是把视频播放器做成一个ocx插件,再插入网页中(注:视频播放器ocx控件中引用了别人做好的lib库)。

#6


很显然啊,三个带黄色问号的,你debug编译的吧,依赖mfc与crt的debug库

#7


嗯,是debug版~~谢谢版主~~

还有两个问题,请版主帮忙解答:

1.那应该找到这三个缺少的库添加到ocx控件目录下么?

2.我编写ocx控件中引用了别人写的lib库,ocx控件中是否可以引用lib库?需不需要把lib库转为dll,然后添加到ocx控件目录下?

撒花感谢版主~~~

#8


大牛们请帮助啊~~~~

#9


安装vc运行库就可以了!

#10


在工程属性中设置MFC为静态链接

#11


我安装了,没用,糗。。。。

#12


安装vc运行库之后依然是不能注册:

“Debug Assertion Failed!

Program: C:\Windows\system32\regsvr32.exe
File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dllinit.cpp
Line: 587

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)”

实在不知道哪有问题,请大牛们帮助~~~

另外,我编写ocx控件中引用了别人写的lib库,ocx控件中是否可以引用lib库?需不需要把lib库转为dll,然后添加到ocx控件目录下?

#13


引用 7 楼 qxnnxq 的回复:
嗯,是debug版~~谢谢版主~~

还有两个问题,请版主帮忙解答:

1.那应该找到这三个缺少的库添加到ocx控件目录下么?

2.我编写ocx控件中引用了别人写的lib库,ocx控件中是否可以引用lib库?需不需要把lib库转为dll,然后添加到ocx控件目录下?

撒花感谢版主~~~

2.如果只是lib静态链接库,直接用,不需要dll!

#14


引用 10 楼 wxj198904 的回复:
在工程属性中设置MFC为静态链接

改为MFC静态链接这个我之前试过,编译没问题,但是我用regsvr32去注册的时候,还会出现错误,不能注册。

在这详细说一下,我引用了别人的lib库,而这个lib库有调用了底层的dll库。

烦请大牛们帮忙~~~~

#15


引用 13 楼 jianwen0529 的回复:
Quote: 引用 7 楼 qxnnxq 的回复:

嗯,是debug版~~谢谢版主~~

还有两个问题,请版主帮忙解答:

1.那应该找到这三个缺少的库添加到ocx控件目录下么?

2.我编写ocx控件中引用了别人写的lib库,ocx控件中是否可以引用lib库?需不需要把lib库转为dll,然后添加到ocx控件目录下?

撒花感谢版主~~~

2.如果只是lib静态链接库,直接用,不需要dll!

我引用了别人的lib库,而这个lib库有调用了底层的dll库。

我已经完全晕了呀。。。请求帮助~~~撒花感谢~~~~

#16


首先先要搞清楚问题所在,你这种若排除dll问题的话就肯定是环境所致,
先私有化部署,将所有依赖的dll拷贝到ocx目录下,然后在具体看问题所在

#17


我新建了一个ActiveX控件,不过没有做任何添加,属性跟我写的ocx控件一样,发现只要包含某个头文件就不能注册:
#include "../../ChestPuncture/Control/ControlCommon.h"
Control就是我引用的别人的lib库,ControlCommon.h是头文件。

求帮助~~~~~~~~~~~
求帮助~~~~~~~~~~~~~~~~~

#18


我现在ocx注册没出现问题,但是我在ActiveX Control Pad中插入控件时:
ocx控件注册问题

崩溃啊~~~~
请大家帮助~~~~

#19


引用 18 楼 qxnnxq 的回复:
我现在ocx注册没出现问题,但是我在ActiveX Control Pad中插入控件时:
ocx控件注册问题

崩溃啊~~~~
请大家帮助~~~~


先把第三方的东西全移除,看看还会崩溃不。如果崩溃,那就是你的代码有问题。如果移除之后没问题,那就写个基于对话框的测试程序测试一下是第三方的东西有问题还是你的用法不对。

#20


另外,黄色感叹号,不是说你的系统少了这几个文件,多半是工程属性设置的有问题,仔细检查工程属性的链接器。

#21


引用 20 楼 go_and_see 的回复:
另外,黄色感叹号,不是说你的系统少了这几个文件,多半是工程属性设置的有问题,仔细检查工程属性的链接器。

我新建一个ocx,不做任何添加,工程属性设置成相同的,注册没问题,所以应该不是工程属性的问题。好像是我代码的问题。

想请教一下,引用别人自己写的控件,控件的初始化及注册应该在哪个地方?

if(!AppHelper::InitWorkPath())//初始化工作目录
return FALSE;
RegisterAllControlClass(m_hInstance);

我写的ocx中要用别人自写的控件,这段代码我应该放到什么地方?我现在是在InitInstance函数中,是不是我这个代码放的位置有问题?

#22


引用 21 楼 qxnnxq 的回复:
我新建一个ocx,不做任何添加,工程属性设置成相同的,注册没问题,所以应该不是工程属性的问题。好像是我代码的问题。

想请教一下,引用别人自己写的控件,控件的初始化及注册应该在哪个地方?

if(!AppHelper::InitWorkPath())//初始化工作目录
return FALSE;
RegisterAllControlClass(m_hInstance);

我写的ocx中要用别人自写的控件,这段代码我应该放到什么地方?我现在是在InitInstance函数中,是不是我这个代码放的位置有问题?


你贴出来的代码没有上下文,没办法给你建议。

第三方控件的注册和正常的ocx注册方式一样,在命令行里敲命令就好了。至于第三方控件的初始化,没什么特别的啊,调用包裹类的create函数就行了。如果提供了自己的初始化函数,那就按照它的要求调用吧。

#23


对了,昨天没仔细看depends显示的黄色dll,这几个是多字节编译选项所需要的dll。你检查一下你的工程是不是unicode?改为多字节试试看。activeX的接口只支持unicode,但你没有给出更多信息,只好建议你改为多字节试试。

#24


不好意思了哈,昨天没认真看帖,以为你用的第三方的库是个activeX。刚刚才看清楚第三方的东西不是activeX,这样就好办了。基本可以确定你的问题是unicode编译选项导致的问题,改为多字节吧。

三连一下,呵呵。 ocx控件注册问题

#25


引用 24 楼 go_and_see 的回复:
不好意思了哈,昨天没认真看帖,以为你用的第三方的库是个activeX。刚刚才看清楚第三方的东西不是activeX,这样就好办了。基本可以确定你的问题是unicode编译选项导致的问题,改为多字节吧。

三连一下,呵呵。 ocx控件注册问题

首先撒花感谢耐心解答~~

我的是多字节~~
我现在注册没出问题了,可是我在activex control pad中插入我写的控件后,什么都看不到,这是怎么回事啊?声明一下,我所有的控件属性均是可见。

各种状况啊,请帮助~~~~~~~

#26


引用 25 楼 qxnnxq 的回复:
首先撒花感谢耐心解答~~

我的是多字节~~
我现在注册没出问题了, 可是我在activex control pad中插入我写的控件后,什么都看不到,这是怎么回事啊?声明一下,我所有的控件属性均是可见。

各种状况啊,请帮助~~~~~~~


activex control pad不了解,俺不做网页相关的东西。建议你写一个基于Dialog的MFC程序验证一下你的activeX是否可以正常使用。

#27


引用 16 楼 xuddk727 的回复:
首先先要搞清楚问题所在,你这种若排除dll问题的话就肯定是环境所致,
先私有化部署,将所有依赖的dll拷贝到ocx目录下,然后在具体看问题所在


版主,我想问个跟主题无关的问题!
就是经常看见也就是你这句话里面的“私有化部署”是一个什么样的概念?貌似百度不出来...

#28


ocx控件注册问题

我在对话框上添加一个自定义Custom Control,再运行程序进行注册ocx,ocx注册没有问题,但是控件却不显示,什么都看不到。。。我对话框和Custom Control属性全部是可视化。

有没有遇到这种状况的,帮忙解答一下~~撒花感谢~~

#29


引用 27 楼 jianwen0529 的回复:
Quote: 引用 16 楼 xuddk727 的回复:

首先先要搞清楚问题所在,你这种若排除dll问题的话就肯定是环境所致,
先私有化部署,将所有依赖的dll拷贝到ocx目录下,然后在具体看问题所在


版主,我想问个跟主题无关的问题!
就是经常看见也就是你这句话里面的“私有化部署”是一个什么样的概念?貌似百度不出来...

所谓私有化部署 简单来讲就是将所依赖的运行时如msvcrxx.dll等都拷贝到exe所在目录。

#30


引用 28 楼 qxnnxq 的回复:
ocx控件注册问题

我在对话框上添加一个自定义Custom Control,再运行程序进行注册ocx,ocx注册没有问题,但是控件却不显示,什么都看不到。。。我对话框和Custom Control属性全部是可视化。

有没有遇到这种状况的,帮忙解答一下~~撒花感谢~~

采用私有化部署 通常可以避免一些环境问题,搜索常规的软件很多也采用了这种方式。

#31


引用 28 楼 qxnnxq 的回复:
我在对话框上添加一个自定义Custom Control,再运行程序进行注册ocx,ocx注册没有问题,但是控件却不显示,什么都看不到。。。我对话框和Custom Control属性全部是可视化。

有没有遇到这种状况的,帮忙解答一下~~撒花感谢~~

30L是为回答27L所提问题,引用有误。
此楼回答下LZ问题,LZ可以贴下ONDRAW看看,资源编辑器里的ocx只触发了ondraw

#32


引用 29 楼 xuddk727 的回复:
Quote: 引用 27 楼 jianwen0529 的回复:

Quote: 引用 16 楼 xuddk727 的回复:

首先先要搞清楚问题所在,你这种若排除dll问题的话就肯定是环境所致,
先私有化部署,将所有依赖的dll拷贝到ocx目录下,然后在具体看问题所在


版主,我想问个跟主题无关的问题!
就是经常看见也就是你这句话里面的“私有化部署”是一个什么样的概念?貌似百度不出来...

所谓私有化部署 简单来讲就是将所依赖的运行时如msvcrxx.dll等都拷贝到exe所在目录。


你那么说我就明白了,感谢解答!!

#33


引用 31 楼 xuddk727 的回复:
Quote: 引用 28 楼 qxnnxq 的回复:


我在对话框上添加一个自定义Custom Control,再运行程序进行注册ocx,ocx注册没有问题,但是控件却不显示,什么都看不到。。。我对话框和Custom Control属性全部是可视化。

有没有遇到这种状况的,帮忙解答一下~~撒花感谢~~

30L是为回答27L所提问题,引用有误。
此楼回答下LZ问题,LZ可以贴下ONDRAW看看,资源编辑器里的ocx只触发了ondraw


void CAlastCtrl::OnDraw(
CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
if (!pdc)
return;

// TODO: Replace the following code with your own drawing code.
m_dlg.MoveWindow(rcBounds,true);
//  pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
//  pdc->Ellipse(rcBounds);
}

谢谢版主~~~新手上路,出现很多问题~~~
请版主帮解答~~~

#34


我现在做一个ocx,ocx具体为在对话框上添加一个空的custom control。到activex control pad插入ocx时去看不到任何东西,对话框和Custom Control属性全部是可视化。这是问什么??

#35


引用 34 楼 qxnnxq 的回复:
我现在做一个ocx,ocx具体为在对话框上添加一个空的custom control。到activex control pad插入ocx时去看不到任何东西,对话框和Custom Control属性全部是可视化。这是问什么??

你是要在资源编辑器里编辑Custom Control属性?

#36


引用 35 楼 xuddk727 的回复:
Quote: 引用 34 楼 qxnnxq 的回复:

我现在做一个ocx,ocx具体为在对话框上添加一个空的custom control。到activex control pad插入ocx时去看不到任何东西,对话框和Custom Control属性全部是可视化。这是问什么??

你是要在资源编辑器里编辑Custom Control属性?


我现在控件注册后,到activex control pad插入ocx时什么都没有。资源里我的属性石可视的,可是注册后,插入后,什么都没有。
ocx控件注册问题

#37


引用 31 楼 xuddk727 的回复:
Quote: 引用 28 楼 qxnnxq 的回复:


我在对话框上添加一个自定义Custom Control,再运行程序进行注册ocx,ocx注册没有问题,但是控件却不显示,什么都看不到。。。我对话框和Custom Control属性全部是可视化。

有没有遇到这种状况的,帮忙解答一下~~撒花感谢~~

30L是为回答27L所提问题,引用有误。
此楼回答下LZ问题,LZ可以贴下ONDRAW看看,资源编辑器里的ocx只触发了ondraw


还有,版主,我的onDraw函数有问题么?
void CAlastCtrl::OnDraw(
CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
if (!pdc)
return;

// TODO: Replace the following code with your own drawing code.
m_dlg.MoveWindow(rcBounds,true);
//  pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
//  pdc->Ellipse(rcBounds);
}

#38


我不明白你的具体业务,不是很好判断

#39


引用 38 楼 xuddk727 的回复:
我不明白你的具体业务,不是很好判断


custom control是一个自写播放器的控件,我现在要把这个custom control加到对话框上,整个注册为ocx。
注册成功的ocx再嵌入网页中,播放视频。

真想把版主搬回家啊~~~

#40


那就是你的ocx再封装custom control,那直接把他的控件拖动到你的对话框上即可,为何在onpaint里move他的窗口来遮罩呢

#41


可参考下斑竹一文 
内嵌Activex的Activex插件开发 

#42


引用 38 楼 xuddk727 的回复:
我不明白你的具体业务,不是很好判断


我把InitInstance函数贴出来,大家帮我看一下:

BOOL CAlastApp::InitInstance()
{
BOOL bInit = COleControlModule::InitInstance();

if (bInit)
{
ControlCommonInint("/Config/ChestPuncture",
"/Images/ChestPuncture",
"/Language/ChestPuncture");
RegisterAllControlClass(m_hInstance);//custom control的注册
}

return bInit;
}

#43


引用 41 楼 xuddk727 的回复:
可参考下斑竹一文 
内嵌Activex的Activex插件开发 


好的,谢谢版主~~
昨天网络不好,今天才看到版主的解答~~
谢谢版主~~~

#44


呃,我ocx加载底层库的配置文件总是有问题。。

弱弱的问一下,ocx应该怎么单步调试呢?

新手上路,请谅解~~

ocx应该怎么跟进去单步调试,求解答~~~~~

#45


 
Test Container
Home |  Overview |  How Do I |  Tutorial |  Sample

The Test Container application, shipped with Visual C++, is an ActiveX control container for testing and debugging ActiveX controls. Test Container allows the control developer to test the control’s functionality by changing its properties, invoking its methods, and firing its events. Test Container can display logs of data-binding notifications and also provides facilities for testing an ActiveX control’s persistence functionality: you can save properties to a stream or to substorage, reload them, and examine the stored stream data. This section describes how to use the basic features of Test Container. For additional information, select the Help menu while running Test Container.

To test your ActiveX control 

On the Tools menu of Visual C++, click ActiveX Control Test Container.


On the Edit menu of Test Container, click Insert New Control.


In the Insert Control box, select the desired control and click OK. The control will appear in the control container. 
Note   If your control is not listed in the Insert Control dialog box, make sure you have registered it with the Register Controls command from the File menu of Test Container.

At this point you can test your control’s properties or events.

To test your ActiveX control with the debugger 

Build a debug version of the control with symbolic debugging information.


From the Build menu, select Settings. 
The Project Settings dialog box appears.

Select the Debug tab.


In the Executable for Debug Session box, type TstCon32.exe—the filename for Test Container. 
Choose OK.

After you complete this procedure, Test Container starts automatically when you begin debugging your control (by selecting Go from the Debug submenu of Build or pressing F5). If a message box appears stating that no debug information is available for the Test Container, ignore the message and choose OK. You can now step through your code, set breakpoints, and use other debugging features.

To test properties 

On the Control menu, click Invoke Methods.


In the Method Name drop-down list, select the PropPut method for the property you want to test.


Modify the Parameter Value or Parameter Type and click on the Set Value button.


Click Invoke to apply the new value to the object. 
The property now contains the new value.

To test events

You can specify the destination of event information. 

On the Options menu, click Logging.


Specify the destination of event information. 
See Also   ActiveX controls

#46


首先,谢谢楼上~~我看了一下,楼上那个应该是test container去测试ocx的事件和属性~

但是我现在是想单步跟进去调试我生成ocx的程序,因为我这个程序现在加载底层lib或dll库的配置文件总是有问题,我想跟进去看问题在哪~~但是不知道怎么跟进去单步调试。。。

#47


选择菜单,调试-附加到进程,选择相应的测试程序,再单步调试即可。

#48


调试之前要设置好ocx里面的断点。

#49


引用 48 楼 bluevox3000 的回复:
调试之前要设置好ocx里面的断点。


嗯,谢谢~~

我今天在网上搜到这个了,但是弄了半天还是不太会弄。
我现在这个ocx要嵌入到网页中,我选iexplore.exe,为什么还是不能按F10单步调试呢?麻烦可以的话,帮忙详细解答一下,ocx不能跟进去调试看配置文件加载情况很郁闷啊。。

撒花感谢哈~~~

#50


引用 48 楼 bluevox3000 的回复:
调试之前要设置好ocx里面的断点。


嗯,谢谢~~

我今天在网上搜到这个了,但是弄了半天还是不太会弄。
我现在这个ocx要嵌入到网页中,我选iexplore.exe,为什么还是不能按F10单步调试呢?麻烦可以的话,帮忙详细解答一下,ocx不能跟进去调试看配置文件加载情况很郁闷啊。。

撒花感谢哈~~~ ocx控件注册问题

#1


自己先顶一下~~

#2


先拿depends导入下看看是不是缺少依赖

#3


ocx控件注册问题

#4


这个是我depends的,应该怎么处理呢?
新手上路,烦大牛指点~~
不胜感激~~
撒花感谢~~

#5


先把我的最终目标说一下,我现在想要把自己做的视频播放器嵌入到网页中播放。

我现在的做法是把视频播放器做成一个ocx插件,再插入网页中(注:视频播放器ocx控件中引用了别人做好的lib库)。

#6


很显然啊,三个带黄色问号的,你debug编译的吧,依赖mfc与crt的debug库

#7


嗯,是debug版~~谢谢版主~~

还有两个问题,请版主帮忙解答:

1.那应该找到这三个缺少的库添加到ocx控件目录下么?

2.我编写ocx控件中引用了别人写的lib库,ocx控件中是否可以引用lib库?需不需要把lib库转为dll,然后添加到ocx控件目录下?

撒花感谢版主~~~

#8


大牛们请帮助啊~~~~

#9


安装vc运行库就可以了!

#10


在工程属性中设置MFC为静态链接

#11


我安装了,没用,糗。。。。

#12


安装vc运行库之后依然是不能注册:

“Debug Assertion Failed!

Program: C:\Windows\system32\regsvr32.exe
File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dllinit.cpp
Line: 587

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)”

实在不知道哪有问题,请大牛们帮助~~~

另外,我编写ocx控件中引用了别人写的lib库,ocx控件中是否可以引用lib库?需不需要把lib库转为dll,然后添加到ocx控件目录下?

#13


引用 7 楼 qxnnxq 的回复:
嗯,是debug版~~谢谢版主~~

还有两个问题,请版主帮忙解答:

1.那应该找到这三个缺少的库添加到ocx控件目录下么?

2.我编写ocx控件中引用了别人写的lib库,ocx控件中是否可以引用lib库?需不需要把lib库转为dll,然后添加到ocx控件目录下?

撒花感谢版主~~~

2.如果只是lib静态链接库,直接用,不需要dll!

#14


引用 10 楼 wxj198904 的回复:
在工程属性中设置MFC为静态链接

改为MFC静态链接这个我之前试过,编译没问题,但是我用regsvr32去注册的时候,还会出现错误,不能注册。

在这详细说一下,我引用了别人的lib库,而这个lib库有调用了底层的dll库。

烦请大牛们帮忙~~~~

#15


引用 13 楼 jianwen0529 的回复:
Quote: 引用 7 楼 qxnnxq 的回复:

嗯,是debug版~~谢谢版主~~

还有两个问题,请版主帮忙解答:

1.那应该找到这三个缺少的库添加到ocx控件目录下么?

2.我编写ocx控件中引用了别人写的lib库,ocx控件中是否可以引用lib库?需不需要把lib库转为dll,然后添加到ocx控件目录下?

撒花感谢版主~~~

2.如果只是lib静态链接库,直接用,不需要dll!

我引用了别人的lib库,而这个lib库有调用了底层的dll库。

我已经完全晕了呀。。。请求帮助~~~撒花感谢~~~~

#16


首先先要搞清楚问题所在,你这种若排除dll问题的话就肯定是环境所致,
先私有化部署,将所有依赖的dll拷贝到ocx目录下,然后在具体看问题所在

#17


我新建了一个ActiveX控件,不过没有做任何添加,属性跟我写的ocx控件一样,发现只要包含某个头文件就不能注册:
#include "../../ChestPuncture/Control/ControlCommon.h"
Control就是我引用的别人的lib库,ControlCommon.h是头文件。

求帮助~~~~~~~~~~~
求帮助~~~~~~~~~~~~~~~~~

#18


我现在ocx注册没出现问题,但是我在ActiveX Control Pad中插入控件时:
ocx控件注册问题

崩溃啊~~~~
请大家帮助~~~~

#19


引用 18 楼 qxnnxq 的回复:
我现在ocx注册没出现问题,但是我在ActiveX Control Pad中插入控件时:
ocx控件注册问题

崩溃啊~~~~
请大家帮助~~~~


先把第三方的东西全移除,看看还会崩溃不。如果崩溃,那就是你的代码有问题。如果移除之后没问题,那就写个基于对话框的测试程序测试一下是第三方的东西有问题还是你的用法不对。

#20


另外,黄色感叹号,不是说你的系统少了这几个文件,多半是工程属性设置的有问题,仔细检查工程属性的链接器。

#21


引用 20 楼 go_and_see 的回复:
另外,黄色感叹号,不是说你的系统少了这几个文件,多半是工程属性设置的有问题,仔细检查工程属性的链接器。

我新建一个ocx,不做任何添加,工程属性设置成相同的,注册没问题,所以应该不是工程属性的问题。好像是我代码的问题。

想请教一下,引用别人自己写的控件,控件的初始化及注册应该在哪个地方?

if(!AppHelper::InitWorkPath())//初始化工作目录
return FALSE;
RegisterAllControlClass(m_hInstance);

我写的ocx中要用别人自写的控件,这段代码我应该放到什么地方?我现在是在InitInstance函数中,是不是我这个代码放的位置有问题?

#22


引用 21 楼 qxnnxq 的回复:
我新建一个ocx,不做任何添加,工程属性设置成相同的,注册没问题,所以应该不是工程属性的问题。好像是我代码的问题。

想请教一下,引用别人自己写的控件,控件的初始化及注册应该在哪个地方?

if(!AppHelper::InitWorkPath())//初始化工作目录
return FALSE;
RegisterAllControlClass(m_hInstance);

我写的ocx中要用别人自写的控件,这段代码我应该放到什么地方?我现在是在InitInstance函数中,是不是我这个代码放的位置有问题?


你贴出来的代码没有上下文,没办法给你建议。

第三方控件的注册和正常的ocx注册方式一样,在命令行里敲命令就好了。至于第三方控件的初始化,没什么特别的啊,调用包裹类的create函数就行了。如果提供了自己的初始化函数,那就按照它的要求调用吧。

#23


对了,昨天没仔细看depends显示的黄色dll,这几个是多字节编译选项所需要的dll。你检查一下你的工程是不是unicode?改为多字节试试看。activeX的接口只支持unicode,但你没有给出更多信息,只好建议你改为多字节试试。

#24


不好意思了哈,昨天没认真看帖,以为你用的第三方的库是个activeX。刚刚才看清楚第三方的东西不是activeX,这样就好办了。基本可以确定你的问题是unicode编译选项导致的问题,改为多字节吧。

三连一下,呵呵。 ocx控件注册问题

#25


引用 24 楼 go_and_see 的回复:
不好意思了哈,昨天没认真看帖,以为你用的第三方的库是个activeX。刚刚才看清楚第三方的东西不是activeX,这样就好办了。基本可以确定你的问题是unicode编译选项导致的问题,改为多字节吧。

三连一下,呵呵。 ocx控件注册问题

首先撒花感谢耐心解答~~

我的是多字节~~
我现在注册没出问题了,可是我在activex control pad中插入我写的控件后,什么都看不到,这是怎么回事啊?声明一下,我所有的控件属性均是可见。

各种状况啊,请帮助~~~~~~~

#26


引用 25 楼 qxnnxq 的回复:
首先撒花感谢耐心解答~~

我的是多字节~~
我现在注册没出问题了, 可是我在activex control pad中插入我写的控件后,什么都看不到,这是怎么回事啊?声明一下,我所有的控件属性均是可见。

各种状况啊,请帮助~~~~~~~


activex control pad不了解,俺不做网页相关的东西。建议你写一个基于Dialog的MFC程序验证一下你的activeX是否可以正常使用。

#27


引用 16 楼 xuddk727 的回复:
首先先要搞清楚问题所在,你这种若排除dll问题的话就肯定是环境所致,
先私有化部署,将所有依赖的dll拷贝到ocx目录下,然后在具体看问题所在


版主,我想问个跟主题无关的问题!
就是经常看见也就是你这句话里面的“私有化部署”是一个什么样的概念?貌似百度不出来...

#28


ocx控件注册问题

我在对话框上添加一个自定义Custom Control,再运行程序进行注册ocx,ocx注册没有问题,但是控件却不显示,什么都看不到。。。我对话框和Custom Control属性全部是可视化。

有没有遇到这种状况的,帮忙解答一下~~撒花感谢~~

#29


引用 27 楼 jianwen0529 的回复:
Quote: 引用 16 楼 xuddk727 的回复:

首先先要搞清楚问题所在,你这种若排除dll问题的话就肯定是环境所致,
先私有化部署,将所有依赖的dll拷贝到ocx目录下,然后在具体看问题所在


版主,我想问个跟主题无关的问题!
就是经常看见也就是你这句话里面的“私有化部署”是一个什么样的概念?貌似百度不出来...

所谓私有化部署 简单来讲就是将所依赖的运行时如msvcrxx.dll等都拷贝到exe所在目录。

#30


引用 28 楼 qxnnxq 的回复:
ocx控件注册问题

我在对话框上添加一个自定义Custom Control,再运行程序进行注册ocx,ocx注册没有问题,但是控件却不显示,什么都看不到。。。我对话框和Custom Control属性全部是可视化。

有没有遇到这种状况的,帮忙解答一下~~撒花感谢~~

采用私有化部署 通常可以避免一些环境问题,搜索常规的软件很多也采用了这种方式。

#31


引用 28 楼 qxnnxq 的回复:
我在对话框上添加一个自定义Custom Control,再运行程序进行注册ocx,ocx注册没有问题,但是控件却不显示,什么都看不到。。。我对话框和Custom Control属性全部是可视化。

有没有遇到这种状况的,帮忙解答一下~~撒花感谢~~

30L是为回答27L所提问题,引用有误。
此楼回答下LZ问题,LZ可以贴下ONDRAW看看,资源编辑器里的ocx只触发了ondraw

#32


引用 29 楼 xuddk727 的回复:
Quote: 引用 27 楼 jianwen0529 的回复:

Quote: 引用 16 楼 xuddk727 的回复:

首先先要搞清楚问题所在,你这种若排除dll问题的话就肯定是环境所致,
先私有化部署,将所有依赖的dll拷贝到ocx目录下,然后在具体看问题所在


版主,我想问个跟主题无关的问题!
就是经常看见也就是你这句话里面的“私有化部署”是一个什么样的概念?貌似百度不出来...

所谓私有化部署 简单来讲就是将所依赖的运行时如msvcrxx.dll等都拷贝到exe所在目录。


你那么说我就明白了,感谢解答!!

#33


引用 31 楼 xuddk727 的回复:
Quote: 引用 28 楼 qxnnxq 的回复:


我在对话框上添加一个自定义Custom Control,再运行程序进行注册ocx,ocx注册没有问题,但是控件却不显示,什么都看不到。。。我对话框和Custom Control属性全部是可视化。

有没有遇到这种状况的,帮忙解答一下~~撒花感谢~~

30L是为回答27L所提问题,引用有误。
此楼回答下LZ问题,LZ可以贴下ONDRAW看看,资源编辑器里的ocx只触发了ondraw


void CAlastCtrl::OnDraw(
CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
if (!pdc)
return;

// TODO: Replace the following code with your own drawing code.
m_dlg.MoveWindow(rcBounds,true);
//  pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
//  pdc->Ellipse(rcBounds);
}

谢谢版主~~~新手上路,出现很多问题~~~
请版主帮解答~~~

#34


我现在做一个ocx,ocx具体为在对话框上添加一个空的custom control。到activex control pad插入ocx时去看不到任何东西,对话框和Custom Control属性全部是可视化。这是问什么??

#35


引用 34 楼 qxnnxq 的回复:
我现在做一个ocx,ocx具体为在对话框上添加一个空的custom control。到activex control pad插入ocx时去看不到任何东西,对话框和Custom Control属性全部是可视化。这是问什么??

你是要在资源编辑器里编辑Custom Control属性?

#36


引用 35 楼 xuddk727 的回复:
Quote: 引用 34 楼 qxnnxq 的回复:

我现在做一个ocx,ocx具体为在对话框上添加一个空的custom control。到activex control pad插入ocx时去看不到任何东西,对话框和Custom Control属性全部是可视化。这是问什么??

你是要在资源编辑器里编辑Custom Control属性?


我现在控件注册后,到activex control pad插入ocx时什么都没有。资源里我的属性石可视的,可是注册后,插入后,什么都没有。
ocx控件注册问题

#37


引用 31 楼 xuddk727 的回复:
Quote: 引用 28 楼 qxnnxq 的回复:


我在对话框上添加一个自定义Custom Control,再运行程序进行注册ocx,ocx注册没有问题,但是控件却不显示,什么都看不到。。。我对话框和Custom Control属性全部是可视化。

有没有遇到这种状况的,帮忙解答一下~~撒花感谢~~

30L是为回答27L所提问题,引用有误。
此楼回答下LZ问题,LZ可以贴下ONDRAW看看,资源编辑器里的ocx只触发了ondraw


还有,版主,我的onDraw函数有问题么?
void CAlastCtrl::OnDraw(
CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
if (!pdc)
return;

// TODO: Replace the following code with your own drawing code.
m_dlg.MoveWindow(rcBounds,true);
//  pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
//  pdc->Ellipse(rcBounds);
}

#38


我不明白你的具体业务,不是很好判断

#39


引用 38 楼 xuddk727 的回复:
我不明白你的具体业务,不是很好判断


custom control是一个自写播放器的控件,我现在要把这个custom control加到对话框上,整个注册为ocx。
注册成功的ocx再嵌入网页中,播放视频。

真想把版主搬回家啊~~~

#40


那就是你的ocx再封装custom control,那直接把他的控件拖动到你的对话框上即可,为何在onpaint里move他的窗口来遮罩呢

#41


可参考下斑竹一文 
内嵌Activex的Activex插件开发 

#42


引用 38 楼 xuddk727 的回复:
我不明白你的具体业务,不是很好判断


我把InitInstance函数贴出来,大家帮我看一下:

BOOL CAlastApp::InitInstance()
{
BOOL bInit = COleControlModule::InitInstance();

if (bInit)
{
ControlCommonInint("/Config/ChestPuncture",
"/Images/ChestPuncture",
"/Language/ChestPuncture");
RegisterAllControlClass(m_hInstance);//custom control的注册
}

return bInit;
}

#43


引用 41 楼 xuddk727 的回复:
可参考下斑竹一文 
内嵌Activex的Activex插件开发 


好的,谢谢版主~~
昨天网络不好,今天才看到版主的解答~~
谢谢版主~~~

#44


呃,我ocx加载底层库的配置文件总是有问题。。

弱弱的问一下,ocx应该怎么单步调试呢?

新手上路,请谅解~~

ocx应该怎么跟进去单步调试,求解答~~~~~

#45


 
Test Container
Home |  Overview |  How Do I |  Tutorial |  Sample

The Test Container application, shipped with Visual C++, is an ActiveX control container for testing and debugging ActiveX controls. Test Container allows the control developer to test the control’s functionality by changing its properties, invoking its methods, and firing its events. Test Container can display logs of data-binding notifications and also provides facilities for testing an ActiveX control’s persistence functionality: you can save properties to a stream or to substorage, reload them, and examine the stored stream data. This section describes how to use the basic features of Test Container. For additional information, select the Help menu while running Test Container.

To test your ActiveX control 

On the Tools menu of Visual C++, click ActiveX Control Test Container.


On the Edit menu of Test Container, click Insert New Control.


In the Insert Control box, select the desired control and click OK. The control will appear in the control container. 
Note   If your control is not listed in the Insert Control dialog box, make sure you have registered it with the Register Controls command from the File menu of Test Container.

At this point you can test your control’s properties or events.

To test your ActiveX control with the debugger 

Build a debug version of the control with symbolic debugging information.


From the Build menu, select Settings. 
The Project Settings dialog box appears.

Select the Debug tab.


In the Executable for Debug Session box, type TstCon32.exe—the filename for Test Container. 
Choose OK.

After you complete this procedure, Test Container starts automatically when you begin debugging your control (by selecting Go from the Debug submenu of Build or pressing F5). If a message box appears stating that no debug information is available for the Test Container, ignore the message and choose OK. You can now step through your code, set breakpoints, and use other debugging features.

To test properties 

On the Control menu, click Invoke Methods.


In the Method Name drop-down list, select the PropPut method for the property you want to test.


Modify the Parameter Value or Parameter Type and click on the Set Value button.


Click Invoke to apply the new value to the object. 
The property now contains the new value.

To test events

You can specify the destination of event information. 

On the Options menu, click Logging.


Specify the destination of event information. 
See Also   ActiveX controls

#46


首先,谢谢楼上~~我看了一下,楼上那个应该是test container去测试ocx的事件和属性~

但是我现在是想单步跟进去调试我生成ocx的程序,因为我这个程序现在加载底层lib或dll库的配置文件总是有问题,我想跟进去看问题在哪~~但是不知道怎么跟进去单步调试。。。

#47


选择菜单,调试-附加到进程,选择相应的测试程序,再单步调试即可。

#48


调试之前要设置好ocx里面的断点。

#49


引用 48 楼 bluevox3000 的回复:
调试之前要设置好ocx里面的断点。


嗯,谢谢~~

我今天在网上搜到这个了,但是弄了半天还是不太会弄。
我现在这个ocx要嵌入到网页中,我选iexplore.exe,为什么还是不能按F10单步调试呢?麻烦可以的话,帮忙详细解答一下,ocx不能跟进去调试看配置文件加载情况很郁闷啊。。

撒花感谢哈~~~

#50


引用 48 楼 bluevox3000 的回复:
调试之前要设置好ocx里面的断点。


嗯,谢谢~~

我今天在网上搜到这个了,但是弄了半天还是不太会弄。
我现在这个ocx要嵌入到网页中,我选iexplore.exe,为什么还是不能按F10单步调试呢?麻烦可以的话,帮忙详细解答一下,ocx不能跟进去调试看配置文件加载情况很郁闷啊。。

撒花感谢哈~~~ ocx控件注册问题