|
![]() |
#1 |
Участник
|
![]()
В указанном коде надо заменить
h = textHandle.dWord(8); // всегда = 0 len = textLength.Word(8); // всегда = 0 :'(( на h = textHandle.dWord(0); // то, что надо ;0) len = textLength.Word(0); // то, что надо :0) Вот функция, которая будет возвращать код и описание последней ошибки, произошедшей в Crystal Report Engine (мало ли, пригодится кому) void showError(int _jn, str _descr = "") { Binary textHandle = new Binary(32); Binary textLength = new Binary(16); Binary errorText; int errCode; HWND h; int len; DLLFunction PEGetErrorCode; DLLFunction PEGetErrorText; DLLFunction PEGetHandleString; ; PEGetErrorCode = new DLLFunction(crdll, "PEGetErrorCode"); PEGetErrorText = new DLLFunction(crdll, "PEGetErrorText"); PEGetHandleString = new DLLFunction(crdll, "PEGetHandleString"); PEGetErrorCode.returns(ExtTypes::Byte); PEGetErrorCode.arg(ExtTypes: ![]() PEGetErrorText.returns(ExtTypes::Byte); PEGetErrorText.arg(ExtTypes::Word, ExtTypes::Pointer, ExtTypes::Pointer); PEGetHandleString.returns(ExtTypes::Byte); PEGetHandleString.arg(ExtTypes: ![]() ExtTypes::Pointer, ExtTypes::Word); try { // код ошибки errCode = PEGetErrorCode.call(_jn); if (!PEGetErrorText.call(_jn, textHandle, textLength)) throw error("Неудачный вызов PEGetErrorText (showError #1)"); else { h = textHandle.dWord(0); len = textLength.Word(0); errorText = new Binary(textLength); if (!PEGetHandleString.call(h, errorText, len)) throw error("Неудачный вызов PEGetHandleString (showError #2)"); } _descr = _descr + (_descr ? "\n" : "") + int2str(errCode) + " - " + errorText.string(0); throw error(_descr); } catch (Exception::Error) { this.closeJob(_jn); throw (""); } } Отдельное спасибо dn за внимание к теме и помощь |
|