|
Ошибка импорта dll ArithmeticException
|
|||
---|---|---|---|
#18+
Импортирую dll-ку: [DllImport("EEG4DLL.DLL", CallingConvention = CallingConvention.StdCall)] private static extern string return_text_error(uint error); При вызове MessageBox.Show(return_text_error(5)); Ее значение возвращается, а потом вызывается исключение System.ArithmeticException "Переполнение или потеря точности в арифметической операции" System.ArithmeticException не обработано HResult=-2147024362 Message=Переполнение или потеря точности в арифметической операции. Source=mscorlib StackTrace: в System.Double.IsPositiveInfinity(Double d) в System.Windows.Window.ValidateTopLeft(Double length) в System.Windows.Window.CoerceTop(DependencyObject d, Object value) в System.Windows.DependencyObject.ProcessCoerceValue(DependencyProperty dp, PropertyMetadata metadata, EntryIndex& entryIndex, Int32& targetIndex, EffectiveValueEntry& newEntry, EffectiveValueEntry& oldEntry, Object& oldValue, Object baseValue, Object controlValue, CoerceValueCallback coerceValueCallback, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, Boolean skipBaseValueChecks) в System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType) в System.Windows.DependencyObject.CoerceValue(DependencyProperty dp) в System.Windows.Window.SetupInitialState(Double requestedTop, Double requestedLeft, Double requestedWidth, Double requestedHeight) в System.Windows.Window.CreateSourceWindow(Boolean duringShow) в System.Windows.Window.CreateSourceWindowDuringShow() в System.Windows.Window.SafeCreateWindowDuringShow() в System.Windows.Window.ShowHelper(Object booleanBox) в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler) в System.Windows.Threading.DispatcherOperation.InvokeImpl() в System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state) в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) в System.Windows.Threading.DispatcherOperation.Invoke() в System.Windows.Threading.Dispatcher.ProcessQueue() в System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) в MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) в MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler) в System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs) в MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) в MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) в System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame) в System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame) в System.Windows.Threading.Dispatcher.Run() в System.Windows.Application.RunDispatcher(Object ignore) в System.Windows.Application.RunInternal(Window window) в System.Windows.Application.Run(Window window) в System.Windows.Application.Run() в WpfEEG.App.Main() в C:\Users\user\Documents\Visual Studio 2010\Projects\EEG\WpfEEG\obj\x86\Debug\App.g.cs:строка 0 в System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() в System.Threading.ThreadHelper.ThreadStart_Context(Object state) в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) в System.Threading.ThreadHelper.ThreadStart() InnerException: Как лечить? Пытался изменить CallingConvention - Cdecl вызывает ошибку PInvokeStackImbalance. В обычном C# Windows Form все работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2014, 22:02 |
|
Ошибка импорта dll ArithmeticException
|
|||
---|---|---|---|
#18+
Алексей Вахтин, возможно проблема возникает при маршаллинге возвращаемой строки и надо указать атрибут [return: MarshalAs(UnmangedType.????)] для функции. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2014, 22:39 |
|
Ошибка импорта dll ArithmeticException
|
|||
---|---|---|---|
#18+
Нет, не помогает. И вообще, эта проблема возникает при вызове любой функции из этой библиотеки. Потому как я столкнулся с ней при вызове функции Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
И та же самая ошибка при вызове функции без параметров: Код: c# 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2014, 23:54 |
|
Ошибка импорта dll ArithmeticException
|
|||
---|---|---|---|
#18+
Проблема, видимо, связана с библиотеками StdCall, так как я сейчас попробовал вызвать функции из библиотеки скомпилированной под директивой C: Код: c# 1. 2. 3. 4. 5. 6.
и все прошло без ошибок. Но проблема в том, что EEG4DLL.DLL - не моя библиотека, я не могу ее перекомпилировать. И под атрибутом CallingConvention = CallingConvention.Cdecl она вообще не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2014, 00:05 |
|
Ошибка импорта dll ArithmeticException
|
|||
---|---|---|---|
#18+
Ошибка появляется, оказывается, если запускать функции в конструкторе или в обработчике события Load. А если сделать вызов функции в другом потоке, то все работает нормально: [CSHARP] ///Функция вызываемая из потока private void _SetErrorFunction(object obj) { MessageBox.Show(return_text_error(4)); } .............. private void Window_Loaded(object sender, RoutedEventArgs e) { ......................... (new SynchronizationContext()).Post(_SetErrorFunction, null); } [/CSHARP] Вот только не знаю почему ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2014, 23:48 |
|
|
start [/forum/topic.php?fid=21&fpage=20&tid=1440995]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 296ms |
total: | 431ms |
0 / 0 |