исключение в коде C - PullRequest
       3

исключение в коде C

3 голосов
/ 24 августа 2011

Хотите знать, что это за исключение?

NTUnhandledExceptionHandler@NTExceptionHandler@@CGJPAU_EXCEPTION_POINTERS@@@Z! jdenet_k.exe?

=====Call stack of thread 5612=====
_LogNTCallStackDump@8! jdel.dll  
?NTUnhandledExceptionHandler@NTExceptionHandler@@CGJPAU_EXCEPTION_POINTERS@@@Z! jdenet_k.exe  
0x78c65b6.<nosymbols>! qstatus.dll  
0x771bd29e.<nosymbols>! ntdll.dll  
0x771bd45f.<nosymbols>! ntdll.dll  

====> Exception C0000005 ACCESS_VIOLATION occurred in thread 5612 with call stack:
_jdeStrcmp@8! jdeunicode.dll  
_IB4210030_SetCrossReferenceItemData@20! CSALES.dll  
_IB4210030_ReconcileSalesOrderLineData@24! CSALES.dll  
_IB4210030_IProcessSalesOrderLine@20! CSALES.dll  
_IB4210030_ProcessNextUnprocessedSalesOrderLine@20! CSALES.dll  
_ProcessNextUnprocessedSalesOrderLine@20! CSALES.dll  
_IB4210900_ProcessUnprocessedLines@12! CSALES.dll  
_IB4210900_PerformSalesOrderAction@32! CSALES.dll  
_SalesOrderApplCtrlEX@12! CSALES.dll  
_jdeCallObjectV2@44! jdekrnl.dll



There is also another related error in one of the log files:

====> Exception C0000005 ACCESS_VIOLATION occurred in thread 5612
call stack dumped in file <E:\JDEdwards\E812\DDP\log\jde_11740_1310990285_1_dmp.log>: iParam: 0000000000
INFO: Entering kernel signal handler, process exiting soon: iParam: 1310990289
INFO: Done setting IPC Handle State structures to abandoned, process exiting immediately: iParam: 1310990289

Ответы [ 2 ]

1 голос
/ 24 августа 2011

выделенный текст Похоже, что функция jdeStrcmp() (stdcall функция) в jdeunicode.dll вызвала исключение (нарушение доступа, другими словами, некоторый указатель был плохим или нулевым).

По моему мнению, хорошая DLL не позволит избежать исключения, но, видимо, это и произошло.

Обновление

Разрешение экранирования исключения обычно не является проблемой для вызывающей стороны, написанной на том же языке, что и DLL. Это может иметь катастрофические последствия для звонящего, который не был. Я говорю из опыта здесь. Функция, конечно, должна как-то сигнализировать вызывающей стороне, что что-то произошло. Как это происходит - вопрос дизайна. Пропуск исключений - это, безусловно, неправильный путь.

См. и этот вопрос об исключениях, пересекающих границы модуля. Или этот (тот же язык, другая версия!). Или Google для этого. Вы увидите много причин и примеров того, почему исключения, пересекающие границы модулей, являются Плохой идеей (tm) .

Одним из примеров языка, который не может перехватывать исключения, которые экранируют (нативную) DLL, является C #, например. в этот ТАК вопрос . Я предполагаю, что то же самое относится и к другим языкам .NET, а также к множеству родных языков.

0 голосов
/ 24 августа 2011

Очевидно, что у вас есть какое-то приложение "JD Edwards", которое использует jdeunicode.dll и jdekrnl.dll .dll. Ошибка находится в функции "JdeStrcmp ()", в jdeunicode.dll.

JdeStrcmp () либо:

а) есть ошибка

 ... or ...

b) не удается обнаружить нулевые или недопустимые аргументы

SUGGESTIONS:

  • Если ваше приложение использует JdeStrcmp () напрямую, убедитесь, что вы проверяете нулевые или недопустимые строковые аргументы при сравнении двух строк. Было бы полезно написать контрольные примеры для различных комбинаций 8-битных ASCII и 16-битных строк Unicode, пока вы в нем.

  • Если вы приобрели это приложение J / Edwards и / или библиотеку разработки, обратитесь в их службу технической поддержки. Возможно, у них есть обновление, которое вы можете установить.

...