原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/51286926
原文中有问题部分已修改。
c#调用c++制作的基于mfc的ocx控件
做了一个小测试,c#调用c++的ocx控件。开发环境:win7,vs2010。基本分以下四个步骤。
ocx控件上显示系统时间,最终c#加载c++的ocx控件跟普通的控件一样。
1.利用c++制作ocx控件。 ocx控件是基于mfc对话框的,
1.1建立active控件
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakEwTXpBeE56VTBNamMwTmpVL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMkwyWnZiblF2TldFMlREVk1NbFF2Wm05dWRITnBlbVV2TkRBd0wyWnBiR3d2U1RCS1FsRnJSa05OUVQwOUwyUnBjM052YkhabEx6Y3dMMmR5WVhacGRIa3ZRMlZ1ZEdWeS5qcGc%3D.jpg?w=700&webp=1)
1.2设置activex
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakEwTXpBeE56VTBOREl4T0RRL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMkwyWnZiblF2TldFMlREVk1NbFF2Wm05dWRITnBlbVV2TkRBd0wyWnBiR3d2U1RCS1FsRnJSa05OUVQwOUwyUnBjM052YkhabEx6Y3dMMmR5WVhacGRIa3ZRMlZ1ZEdWeS5qcGc%3D.jpg?w=700&webp=1)
1.3插入对话框
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakEwTXpBeE56VTFNRFkyTXpNL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMkwyWnZiblF2TldFMlREVk1NbFF2Wm05dWRITnBlbVV2TkRBd0wyWnBiR3d2U1RCS1FsRnJSa05OUVQwOUwyUnBjM052YkhabEx6Y3dMMmR5WVhacGRIa3ZRMlZ1ZEdWeS5qcGc%3D.jpg?w=700&webp=1)
1.4设置对话框属性
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakEwTXpBeE56VTFNakF3TlRVL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMkwyWnZiblF2TldFMlREVk1NbFF2Wm05dWRITnBlbVV2TkRBd0wyWnBiR3d2U1RCS1FsRnJSa05OUVQwOUwyUnBjM052YkhabEx6Y3dMMmR5WVhacGRIa3ZRMlZ1ZEdWeS5qcGc%3D.jpg?w=700&webp=1)
1.5添加对话框类
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakEwTXpBeE56VTFNekV5TnpRL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMkwyWnZiblF2TldFMlREVk1NbFF2Wm05dWRITnBlbVV2TkRBd0wyWnBiR3d2U1RCS1FsRnJSa05OUVQwOUwyUnBjM052YkhabEx6Y3dMMmR5WVhacGRIa3ZRMlZ1ZEdWeS5qcGc%3D.jpg?w=700&webp=1)
1.6在activex中添加对话框类的成员变量(或者叫实例化对话框)
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakEwTXpBeE56VTFORFF3TWpnL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMkwyWnZiblF2TldFMlREVk1NbFF2Wm05dWRITnBlbVV2TkRBd0wyWnBiR3d2U1RCS1FsRnJSa05OUVQwOUwyUnBjM052YkhabEx6Y3dMMmR5WVhacGRIa3ZRMlZ1ZEdWeS5qcGc%3D.jpg?w=700&webp=1)
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UVXVZMjVpYkc5bmN5NWpiMjB2WW14dlp5OHpNREkzTkRZdk1qQXhOekExTHpNd01qYzBOaTB5TURFM01EVXlNakUxTXpVME56TXlNQzB4T0Rrd09EY3lOVGt1Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
1.7
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakEwTXpBeE56VTJNakV3TWpVL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMkwyWnZiblF2TldFMlREVk1NbFF2Wm05dWRITnBlbVV2TkRBd0wyWnBiR3d2U1RCS1FsRnJSa05OUVQwOUwyUnBjM052YkhabEx6Y3dMMmR5WVhacGRIa3ZRMlZ1ZEdWeS5qcGc%3D.jpg?w=700&webp=1)
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakEwTXpBeE56VTJNek15T1RBL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMkwyWnZiblF2TldFMlREVk1NbFF2Wm05dWRITnBlbVV2TkRBd0wyWnBiR3d2U1RCS1FsRnJSa05OUVQwOUwyUnBjM052YkhabEx6Y3dMMmR5WVhacGRIa3ZRMlZ1ZEdWeS5qcGc%3D.jpg?w=700&webp=1)
下图的重写函数,用来添加对话框的初始化函数
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakEwTXpBeE56VTJORE16T0RnL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMkwyWnZiblF2TldFMlREVk1NbFF2Wm05dWRITnBlbVV2TkRBd0wyWnBiR3d2U1RCS1FsRnJSa05OUVQwOUwyUnBjM052YkhabEx6Y3dMMmR5WVhacGRIa3ZRMlZ1ZEdWeS5qcGc%3D.jpg?w=700&webp=1)
下图定时器,更新时间。
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakEwTXpBeE56VTJOVGc1T1RRL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMkwyWnZiblF2TldFMlREVk1NbFF2Wm05dWRITnBlbVV2TkRBd0wyWnBiR3d2U1RCS1FsRnJSa05OUVQwOUwyUnBjM052YkhabEx6Y3dMMmR5WVhacGRIa3ZRMlZ1ZEdWeS5qcGc%3D.jpg?w=700&webp=1)
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakEwTXpBeE56VTNNVEU0TmprL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMkwyWnZiblF2TldFMlREVk1NbFF2Wm05dWRITnBlbVV2TkRBd0wyWnBiR3d2U1RCS1FsRnJSa05OUVQwOUwyUnBjM052YkhabEx6Y3dMMmR5WVhacGRIa3ZRMlZ1ZEdWeS5qcGc%3D.jpg?w=700&webp=1)
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakEwTXpBeE56VTNNakV4TXpVL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMkwyWnZiblF2TldFMlREVk1NbFF2Wm05dWRITnBlbVV2TkRBd0wyWnBiR3d2U1RCS1FsRnJSa05OUVQwOUwyUnBjM052YkhabEx6Y3dMMmR5WVhacGRIa3ZRMlZ1ZEdWeS5qcGc%3D.jpg?w=700&webp=1)
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakEwTXpBeE56VTNNems1TXpVL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMkwyWnZiblF2TldFMlREVk1NbFF2Wm05dWRITnBlbVV2TkRBd0wyWnBiR3d2U1RCS1FsRnJSa05OUVQwOUwyUnBjM052YkhabEx6Y3dMMmR5WVhacGRIa3ZRMlZ1ZEdWeS5qcGc%3D.jpg?w=700&webp=1)
2.注册ocx控件
注册ocx空间时,注意路径,若有相关的dll要和ocx放在一个目录下,才能注册成功。
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakEwTXpBeE56VTNOVFEyTXpnL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMkwyWnZiblF2TldFMlREVk1NbFF2Wm05dWRITnBlbVV2TkRBd0wyWnBiR3d2U1RCS1FsRnJSa05OUVQwOUwyUnBjM052YkhabEx6Y3dMMmR5WVhacGRIa3ZRMlZ1ZEdWeS5qcGc%3D.jpg?w=700&webp=1)
3.在c#中,加载ocx控件
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakEwTXpBeE56VTRNRFUwTVRrL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMkwyWnZiblF2TldFMlREVk1NbFF2Wm05dWRITnBlbVV2TkRBd0wyWnBiR3d2U1RCS1FsRnJSa05OUVQwOUwyUnBjM052YkhabEx6Y3dMMmR5WVhacGRIa3ZRMlZ1ZEdWeS5qcGc%3D.jpg?w=700&webp=1)
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakEwTXpBeE56VTRNakV6TWpZL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMkwyWnZiblF2TldFMlREVk1NbFF2Wm05dWRITnBlbVV2TkRBd0wyWnBiR3d2U1RCS1FsRnJSa05OUVQwOUwyUnBjM052YkhabEx6Y3dMMmR5WVhacGRIa3ZRMlZ1ZEdWeS5qcGc%3D.jpg?w=700&webp=1)
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakEwTXpBeE56VTRNelExT1RBL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMkwyWnZiblF2TldFMlREVk1NbFF2Wm05dWRITnBlbVV2TkRBd0wyWnBiR3d2U1RCS1FsRnJSa05OUVQwOUwyUnBjM052YkhabEx6Y3dMMmR5WVhacGRIa3ZRMlZ1ZEdWeS5qcGc%3D.jpg?w=700&webp=1)
4.在c#中,利用ocx控件
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakEwTXpBeE56VTROVFF5TVRVL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMkwyWnZiblF2TldFMlREVk1NbFF2Wm05dWRITnBlbVV2TkRBd0wyWnBiR3d2U1RCS1FsRnJSa05OUVQwOUwyUnBjM052YkhabEx6Y3dMMmR5WVhacGRIa3ZRMlZ1ZEdWeS5qcGc%3D.jpg?w=700&webp=1)
![c#调用c++制作的基于mfc的ocx控件 c#调用c++制作的基于mfc的ocx控件](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakEwTXpBeE56VTVNakl6TWpVL2QyRjBaWEp0WVhKckx6SXZkR1Y0ZEM5aFNGSXdZMFJ2ZGt3eVNuTmlNbU4xV1ROT2EySnBOWFZhV0ZGMkwyWnZiblF2TldFMlREVk1NbFF2Wm05dWRITnBlbVV2TkRBd0wyWnBiR3d2U1RCS1FsRnJSa05OUVQwOUwyUnBjM052YkhabEx6Y3dMMmR5WVhacGRIa3ZRMlZ1ZEdWeS5qcGc%3D.jpg?w=700&webp=1)