我有一个OCX的控件,我在VC里用导入控件的方式就可以调用。
这个时候这个OCX是从CWnd里面派生的。
如果我用class Wizard方式导入这个OCX的类型库。这个时候我用CreateDispach("类名classID")
之后我再调用OCX里的方法为什么都不能得到正确结果呢?我想问大家,从Compoent里导入的OCX和从class Wizard中导入的有什么区别?
其实很多OCX都是不带界面的,如MSCOMM.dll难道我非要创建一个窗口来放不行么?
这个时候这个OCX是从CWnd里面派生的。
如果我用class Wizard方式导入这个OCX的类型库。这个时候我用CreateDispach("类名classID")
之后我再调用OCX里的方法为什么都不能得到正确结果呢?我想问大家,从Compoent里导入的OCX和从class Wizard中导入的有什么区别?
其实很多OCX都是不带界面的,如MSCOMM.dll难道我非要创建一个窗口来放不行么?
解决方案 »
- winhttp+SSL POST上传文件问题?(有源码)
- 大虾们看看这段代码,哪有问题
- listview控件实时监控的问题!(带代码,解决200分)
- 巨奇怪的问题,大家从技术角度解释一下?
- 关于dll中的钩子。
- 请问,什么是多串口卡或多串口板?可以用vc带的mscomm控件进行通信编程吗?
- 高手看过来。。。。
- 假设有个叫做“请输入密码”的窗口,其中包含有两个“Edit”控件,具体情况如下:
- 传输率问题
- 我要问:怎样申请一个LPCTSTR变量的地址空间?
- 誰用过CImage类库?为什么用它把BMP转为JPEG后图片色调不正常?
- 北京,第一次和一个女孩子出去玩,现在到什么地方玩比较好,到公园是不是太冷,我对北京不熟,各位给推荐个地方,多谢
BOOL RegisterOcx(LPCSTR pszDllName)
{
HRESULT (STDAPICALLTYPE * lpDllEntryPoint) (void);
LPCSTR pszDllEntryPoint = TEXT("");//_szDllRegSvr;
BOOL bRtn;
if (FAILED(OleInitialize(NULL)))
{
AfxMessageBox("Ole Initialize failed");
return FALSE;
}
SetErrorMode(SEM_FAILCRITICALERRORS);
HINSTANCE hLib = LoadLibraryEx(pszDllName, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
if (hLib < (HINSTANCE)HINSTANCE_ERROR)
{
AfxMessageBox("Load Libary failed");
bRtn = FALSE;
goto CleanOle;
}
在vc中使用组件通常用三种方法
1 使用com库函数,就是直接使用CoCreateInstance等函数直接访问COM对象提供的方法
这个方法需要你将com组件接口定义和说明文件包含进来,比较麻烦
2使用MFC OLE的Classwizard,利用ClassWizard从对象的类型库中创建组件的包装类,然后通过包装类来调用com对象提供的方法和属性
3使用#import指令引入类型库,编译器从类型库中读出信息并且创建包装类,然后通过包装类调用com的方法和属性
Compoent里导入的OCX和从class Wizard中导入的有什么区别??
我觉得两种方法从本质上说是一样的,都是给你的com组件生成一个包装类,要说有区别那就是compoent的包装类是一个窗口类,从class wizard生产的包装类就是一个普通的c++类,至于你说的两种方法的结果不一样,我也不明白,从理论上应该是一样的,你再仔细的检查一下代码如果真的不一样,请告诉我,我正在学习