111,097
社区成员




public class FortranClass
{
[DllImport("OVERLEN.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
private static extern void OVERLEN(ref float vlaue);
[HandleProcessCorruptedStateExceptions()]
[SecurityCritical]
public static void overLenTest()
{
try
{
float[] value = new[] { 1f, 2f, 9f, 8f, 2f };
OVERLEN(ref value[0]);
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
}
调用:
private void Test()
{
try
{
Assembly t = Assembly.Load("FortranLib");
Type a = t.GetType("FortranLib.FortranClass");
object obj = Activator.CreateInstance(a);
MethodInfo mi = a.GetMethod("overLenTest");
mi.Invoke(obj,null);
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
结果还是会弹出那个错误弹框,关闭弹框后主程序就死啦[/quote]
把你这段代码封成一个类库 然后再给主程序调用
而不是在主程序写这段代码 public class FortranClass
{
[DllImport("OVERLEN.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
private static extern void OVERLEN(ref float vlaue);
[HandleProcessCorruptedStateExceptions()]
[SecurityCritical]
public static void overLenTest()
{
try
{
float[] value = new[] { 1f, 2f, 9f, 8f, 2f };
OVERLEN(ref value[0]);
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
}
调用:
private void Test()
{
try
{
Assembly t = Assembly.Load("FortranLib");
Type a = t.GetType("FortranLib.FortranClass");
object obj = Activator.CreateInstance(a);
MethodInfo mi = a.GetMethod("overLenTest");
mi.Invoke(obj,null);
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
结果还是会弹出那个错误弹框,关闭弹框后主程序就死啦 [System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute()]
static void Main(string[] args)
{
try
{
float[] s = new[] {1f, 3f, 4f, 2f, 3f};
OVERLEN(ref s[0]);
}
catch (Exception e)
{
Console.WriteLine(e);
}
Console.WriteLine("OK");
Console.ReadLine();
}
[DllImport("OVERLEN.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
private static extern void OVERLEN(ref float vlaue);