由于visionpro在7.2以及后续的版本中全面支持.net架构,不在发布COM组件。所以不能在VC++中直接使用visionpro. 但是可以利用interop 将.net 的程序封装为要吧在VC++中调用的COM组件。使用方法如下:
1. VB.net中建一个工程InteropUserControl
添加reference
代码中加入 improts …
加入函数 例如 public OpenImage()
界面中加入显示内容。
以上内容与VB.net编程一致。在此不再详述。
2. 编译
在debug 文件中输出两个文件,*.dll, *.tlb
注意:编译需要管理员权限。 Register for COM interop 勾选。
3,注册dll, tlb文件。
将*.dll ,*.tlb文件copy至system32下。
管理员权限运行cmd.exe
regasm.exe的全路径, 在C:\Windows\Microsoft.NET\Framework\v4.0.30319
在命令中输入:C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe *.dll /tlb:*.tlb.
注册成功。
卸载命令:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe *.dll /unregister /tlb:*.tlb.
如果是64位系统,请选择Framework64
全局程序集缓存工具
C:\Windows\system32\ gacutil.exe /i *.dll
全局程序集缓存工具使你可以查看和操作全局程序集缓存和下载缓存的内容。
此工具会自动随 Visual Studio 一起安装。 若要运行此工具,请使用开发人员命令提示(或 Windows 7 中的 Visual Studio 命令提示)。
使用方法如下:
方法1: (1).开始菜单->Microsoft Visual Studio 2010 ->Visual Studio Tools->Visual Studio Command Prompt (2010) 命令提示,在控制台中输入 gacutil.exe 回车,既可以看到一些参数。
(2).输入:gacutil.exe -i dll路径,就可完成DLL的注册。
注:如果输入gacutil.exe找不到,我的电脑里面安装了VS2010和VS2013,使用此方法失败。
方法2:(1).在路径C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools 下找到gacutil.exe。(不同的操作系统,可能不一样)
(2).打开cmd,输入cd C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools,进入当前路径下,
然后输入gacutil /i C:\Projects\Code\EAR\Branch20130515\Telerik\Telerik.OpenAccess.dll即可完成注册。
注:该方法主要是找到gacutil.exe,进入该路径下,注册对应dll所在的物理地址。
以上完成了使用 Gacutil.exe 注册DLL, Gacutil.exe具体的使用请参见 http://msdn.microsoft.com/zh-CN/library/ex0ss12c.aspx 。
4,VC中的调用。
在 头文件中加入:
#import "C:\\Windows\\system32\\VB_netToVB6.tlb"raw_interfaces_only, raw_native_types, no_namespace, named_guids, no_implementation
定义成员变量:
CComQIPtr<_InteropUserControl>m_pUserControl;
在界面中添加ActiveX 控件,前面VB.net生成的,*.interopUserControl
在初始化中将控件与成员变量绑定:
m_pUserControl=GetDlgItem(IDC_INTEROPUSERCONTROL1)->GetControlUnknown();
在需要的地方调用VB.net中编写的方法:
m_pUserControl->OpenImage()
注意:dll,在编译的过程中可能会被破坏,需要重新注册。修改界面后,需要重新生成强制签名。
至此,你学会了在VC中调用VB.net中封装的COM!