首页 新闻 会员 周边

关于“初始值设定项启发的异常”

0
悬赏园豆:200 [已关闭问题]
请教各位一个问题:
我要在用C#在.NET下调用Mtlab生成的DLL,要用到Mwarray这个类,有一条简单的语句:double[] resOut = new double[1024];
MwChayArray filename=textbox.text;
Quan2115 canshu = new Quan2115();
resOut = (double[])((MWNumericArray)canshu.imagedetect((MWArray)fileName_m)).ToVector(MWArrayComponent.Real);

这些语句在我写的测试程序中都没有问题,但写到实际用的程序中MwChayArray filename=textbox.text;
这条语句就会发生问题:“MathWorks.MATLAB.NET.Arrays.MWCharArray”的类型初始值设定项引发异常。不知道为什么?该加载的DLL都加载了。

我挺急的,14号就要去北邮比赛了,大恩不言谢!!!
烈焰风暴的主页 烈焰风暴 | 初学一级 | 园豆:0
提问于:2009-08-12 13:11
< >
分享
其他回答(5)
0

你掉的是MtLab生成的DLL,应该是非托管的吧。

.net中调用非托管的DLL,不知道lz调的时候正确,这场情况下该加载的DLL都加载了不应该出现类型初始化的问题。

再就是会不会是编译过程中FrameWork不识别你那种类型

GWPBrian | 园豆:428 (菜鸟二级) | 2009-08-12 13:37
是非托管的。“FrameWork不识别你那种类型”测试程序和实际的程序都是VS2005,我有点怀疑是不是环境变量之类的问题,或者是什么路径不对,不是同一台机子。
支持(0) 反对(0) 烈焰风暴 | 园豆:0 (初学一级) | 2009-08-12 14:14
0

应该是你上面的代码在构造函数里调用了吧,导致对象构造不成功,特别是在静态构造中一定要捕获异常,静态构造是编译器处理的,静态构造中出的异常会被转义为上面的异常。

建议你把这些代码换个位置,不要在构造中处理,你的测试代码没问题,那就不是你的调用非托管的问题了。

winzheng | 园豆:8797 (大侠五级) | 2009-08-12 14:54
不是构造函数,就是Button事件里的一个局部变量,把主程序放在测试程序的机子上就运行成功了,但我需要放在不同的机子上,不懂为什么。
支持(0) 反对(0) 烈焰风暴 | 园豆:0 (初学一级) | 2009-08-12 15:03
查一下Dll的依赖,是否少了程序集,间接引用的那种。
支持(0) 反对(0) winzheng | 园豆:8797 (大侠五级) | 2009-08-13 09:27
0

你的系统是同类型的吗,都是XP or windows 2003,应该不是变量的问题,一定是机器的环境问题,例如:一个是Fx2.0;一个是FX 3.5

博弈IT | 园豆:366 (菜鸟二级) | 2009-08-12 22:49
都是xp sp3
支持(0) 反对(0) 烈焰风暴 | 园豆:0 (初学一级) | 2009-08-13 09:15
0

MwChayArray filename=textbox.text???

textbox.text是个string,MwChayArray 也是string吗 ?

是不是应该textbox.text.ToCharArray呢?

天堂口 | 园豆:514 (小虾三级) | 2009-08-13 08:25
textbox.text是string 类型是不一样,可都是这么用的。
支持(0) 反对(0) 烈焰风暴 | 园豆:0 (初学一级) | 2009-08-13 09:14
0

MathWorks.MATLAB.NET.Arrays.MWCharArray这个类在初始值设定时有其他静态字段或静态构造函数抛出异常。

因为类型在第一次调用的时候会初始化所有静态字段和静态构造函数,如果其他静态字段或构造函数抛出异常,就会抛出“类型的初始值设定引发的异常”。

详细分析请参考我的随笔:类型初始值设定项引发异常

麒麟.NET | 园豆:3614 (老鸟四级) | 2009-08-13 11:02
0

楼组,你的问题已经解决了么,可以分享一下吗?虽然已经事隔很久了,如果能记起来跟我们分享一下吧。。

Sweet Smile | 园豆:202 (菜鸟二级) | 2016-05-12 16:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册