win8.1 64操作系统 C# WINFORM加载OCX时 IDE直接死

lijian910wolf 2019-06-02 06:30:47
请教个问题,关于加载第三方OCX的问题
市面上一个VB写的一个vsflex7.ocx这个OCX,以前一个C# WINFORM开发项目用到该OCX控件,记得是WIN7 32位, VS2005 IDE开发,可以用。

现在的话,是WIN8.1 64位系统,软件还能能正常编译一个EXE,然后制作安装包(包括了那个vsflex7.ocx),然后电脑上安装软件,界面都能正常打开。

但是现在一个问题是,用VS2013开发工具打开这个项目代码,,然后打开加载vsflex7.ocx这个OCX的控件的DESIGN界面的话,VS IDE直接死了,然后VS重启。
单步调试的时候,出现如下异常,说是没注册OCX:

事实是前面安装软件包的时候就自动注册了,而且软件运行正常,能打开那个加载该OCX控件的界面。

为什么在开发工具里面却无法打开呢?

另外我又额外的加该OCX拷贝的系统的SysWOW64文件夹下,然后在该目录下,手工注册regsvr32 vsflex7.ocx,也是提示成功的。

但是结果还是一样,在VS IDE上无法将该OCX的控件拖到Form上,也无法打开早期项目已经建好的form(早期的时候拖了该ocx控件进去)

谢谢
...全文
153 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijian910wolf 2019-10-20
  • 打赏
  • 举报
回复
不好意思,有段时间没看代码了,刚想起来还有这个问题,今天又调试了下,之前在WIN7系统上用VS2010开发的EXE在我现在的WIN8.1系统上能正常工作。
但是我现在在WIN8.1下用VS2013开发工具打开,编译成功,但是一运行该控件的FORM时,就出现如下错误:
//
// axVSFlexGrid
//
this.axVSFlexGrid.DataSource = null;/////////////////////////////////////////异常在这
this.axVSFlexGrid.Dock = System.Windows.Forms.DockStyle.Fill;
this.axVSFlexGrid.Location = new System.Drawing.Point(0, 25);
this.axVSFlexGrid.Name = "axVSFlexGrid";
this.axVSFlexGrid.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axVSFlexGrid.OcxState")));
this.axVSFlexGrid.Size = new System.Drawing.Size(766, 432);
this.axVSFlexGrid.TabIndex = 4;

下面的是异常信息,为啥呢,很奇怪,VS2010在WIN7上编译出来的EXE在现在这WIN8.1系统上是正常工作的,但在WIN8.1上编译出来的就不行了。
An unhandled exception of type 'System.MissingMethodException' occurred in FIDController.exe

Additional information: 找不到方法:“Void VSFlex7.IVSFlexGrid.set_DataSource(msdatasrc.DataSource)”。
华芸智森 2019-06-04
  • 打赏
  • 举报
回复
引用 5 楼 lijian910wolf 的回复:
[quote=引用 1 楼 MSTOP 的回复:] 这个控件我在VB6时用过,也是用破解的. 记得这个控件有一个REG属性,在属性里输入注册码.
几年前我还用VS开发工具打开过,改了里面的一个列名,现在就打开不了了。[/quote] NET与COM/OCX的兼容问题目前我遇到的是在 WIN8/8.1下.在WIN7,WIN10没有遇到过. 很可能是WIN8的问题. 我之前有一个INTEL的COM DLL,一直在用,WIN7,WIN10都没有问题,但一遇到WIN8就出问题.我也没有深够这个是什么原因,后来直接不使用这个COM DLL (也是系统中使用的唯一的一个COM DLL ).用NET里的原生方法取代.虽然程序比不上 COM DLL ,但兼容性比COM要好.
threenewbee 2019-06-03
  • 打赏
  • 举报
回复
这个看上去应该是component one studio吧,你可以找安装包先在你的机器上安装下 在你的项目属性-目标生成里选择x86 再在你的项目里添加引用-com引用,引用这个控件。 .net上原生的比较好的控件包有netadvantage和devexpress
lijian910wolf 2019-06-03
  • 打赏
  • 举报
回复
引用 1 楼 MSTOP 的回复:
这个控件我在VB6时用过,也是用破解的.
记得这个控件有一个REG属性,在属性里输入注册码.


几年前我还用VS开发工具打开过,改了里面的一个列名,现在就打开不了了。
lijian910wolf 2019-06-03
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
ocx是32bit的,你应该强制你的程序集以32bit的方式运行,但是更好的办法是彻底淘汰这种控件。
原生的网格控件多得是


因为项目比较旧,也没时间去换新的控件,本身程序是能跑的,是win32的方式。只是在VS开发工具里无法打开有这个控件的设计界面(Form)

另外能介绍一个款源生的网格控件吗?C# winform的。
threenewbee 2019-06-03
  • 打赏
  • 举报
回复
ocx是32bit的,你应该强制你的程序集以32bit的方式运行,但是更好的办法是彻底淘汰这种控件。 原生的网格控件多得是
华芸智森 2019-06-03
  • 打赏
  • 举报
回复
这个控件我在VB6时用过,也是用破解的. 记得这个控件有一个REG属性,在属性里输入注册码.

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧