WPF引用OCX导致的算术运算符溢出

原文链接http://www.ilisen.net/wpf-references-ocx-causes-an-arithmetic-operator-overflow.html

这个问题其实原因在于OCX控件与WPF类型的一些不匹配。

之前,我在我的项目里面,通过winform控件承载ocx,然后通过中
间生成的DLL来达到引用OCX的目的。一般情况下,这种方法是比较方便而且有效的(之前也是使用的这种方法),后来发现OCX报这个异常之后,不能再通
过这种方式引用了(其实方法还是这个方法,只不过稍微改变一下)。

首先,我们还是通过winform控件承载OCX,不过我们在这里面需要调用一下系统的API【msvcr71.dll】,具体方法如下:

[code lang="csharp"] [DllImport("msvcr71.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int _fpreset();[/code]

然后我们在初始化完控件之后,调用这个方法如下:

[code lang="csharp"] SoftAgent = new AxSoftAgent.AxSoftAgentBar();
((System.ComponentModel.ISupportInitialize)(this.SoftAgent)).BeginInit();
this.Controls.Add(SoftAgent);
((System.ComponentModel.ISupportInitialize)(this.SoftAgent)).EndInit();
_fpreset();[/code]

然后将你需要调用的方法或者事件封装到这个类里面,然后引用这个控件生成的DLL,在调用方法、事件,这样就不会再报XX发生溢出(XXX
OVERFLOW)的错误了。

[box]这个地方需要使用msvcr71.dll,如果没有,可以到网上下载,64位win7放到X:\Windows\SysWOW64[/box]

时间: 2024-10-09 04:19:12

WPF引用OCX导致的算术运算符溢出的相关文章

Swift中的"可溢出"算术运算符

大家知道Swift中拥有和C,Objc类似的算术运算符,它们分别是: + - * / % 但是你可能不知道这些Swift中的运算符和C,Objc语言中的有一个很大的不同之处,就是它们不可以被"溢出",无论是上溢还是下溢! 在C之类的较低级语言中,如果对可能发生溢出的算术数值做算术运算,结果就会发生所谓的上溢或下溢,比如你对最大的Int32正数加一结果是一个极大的负数:-2147483648 不过在Swift中,如果发生这种情况,运行时就会抛出异常,你的App就会挂掉! 这可能不是你想要

08-JAVA算术运算符和逻辑运算符

Java的运算符,分为四类: 算数运算符.关系运算符.逻辑运算符.位运算符. 算数运算符(9):+  -  *  /  %  ++  -- 关系运算符(6):==  !=  >  >=  <  <= 逻辑运算符(6):&&  ||  !  ^  &  | 位运算符(7):&  |  ~  ^  >>  <<  >>> ----------------------------------------------

类型转换,算术运算符及其练习题

一.数据类型转换:(一)其它类型 转换 值类型:         Convert.ToInt32(要转换的变量);-----经常使用,比int.Parse更严谨,更高级.         int.Parse(要转换的变量);--------------偶尔使用        (int)变量:-----------------------------强制转换,用时极少,不太好用 PS:string a = "10";        int b = 5;       double c =

C#2 (数值类型及调用、引用类型及调用、装拆箱、常量、变量、数据类型转换、算术运算符、赋值运算符、关系运算符、逻辑运算符、字符串的常用方法)

一.数值类型及其调用原理 名称 说明 所占字节 范围 byte 字节型 1 -27~27-1 short 短整型 2 -215~215-1 int 整型 4 -231~231-1 long 长整型 8 -263~263-1 char 字符型 1 0~65535 float 单精度型 4 ±1.5*10-45~±3.4*1038 double 双精度型 8 ±5.0*10-324~±1.7*10308 bool 布尔型 1 只有true和false两个值 static void Main(stri

算术运算符与控制台输入

基本运算符:"+   -   *   /" "+"的作用: +在算术运算符中表示做加法运算 在字符串中,可以用来连接字符串,同时也可以和其他的数据类型的变量进行连接 关系运算符:">,<"  "==,!="  ">=,<=" 关系运算符的作用:用来做比较运算,比较结果是boolean类型 自增(自减)的运算符:++,-- 可以将当前的变量自我增加(减少)1的运算符 1:i++,后++

Python算术运算符

Python算术运算符 以下假设变量: a=10,b=20: 运算符 描述 实例 + 加 - 两个对象相加 a + b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 200 / 除 - x除以y b / a 输出结果 2 % 取模 - 返回除法的余数 b % a 输出结果 0 ** 幂 - 返回x的y次幂 a**b 为10的20次方, 输出结果 100000000000000

17.2015.08.04第十八节课 C#2 (数值类型及调用、引用类型及调用、装拆箱、常量、变量、数据类型转换、算术运算符、赋值运算符、关系运算符、逻辑运算符、字符串的常用方法)

一.数值类型及其调用原理 名称 说明 所占字节 范围 byte 字节型 1 -27~27-1 short 短整型 2 -215~215-1 int 整型 4 -231~231-1 long 长整型 8 -263~263-1 char 字符型 1 0~65535 float 单精度型 4 ±1.5*10-45~±3.4*1038 double 双精度型 8 ±5.0*10-324~±1.7*10308 bool 布尔型 1 只有true和false两个值 static void Main(stri

算术运算符中的自增与自减的注意事项

++.--两种运算符都是单目运算符,具有向右结合性(也就是优先与运算符右边的变量结合),而且他们的优先级比其他算术运算符高.当++或--运算符置于变量的左边时,称为前置运算,表示先进行自增或自减运算再使用变量的值,而当++或--运算符置于变量的右边时,称为后置运算,表示先引用变量的值再自增或自减运算. 如,设i=1,j=2,则在计算++i+j--的结果时,先进行++i运算,得i=2,再进行j--运算,根据后置运算规则可知,系统将先引用j的原始值2与i的新值2相加,之后再进行j--,得j=1.因此

Swift算术运算符

1.基本运算符 一元运算符:--,++.- 算术运算符     二元运算符:加减乘除 算术赋值运算符:a+=b,a-=b 关系运算符:==,!=,>,<,>=,<=,===(恒等于,用于比较类创建的实例,比较内存地址),!==,返回值为true和false 逻辑运算符:!,&,&&(短路与,提高运算速度),|,||(短路或) 位运算符:~,&,|,^,>>,<< 其他运算符: 1. 三元运算符:(?:):x?y:z,其中x,y