![]() |
#5 |
Участник
|
Результаты изысканий
В общем, саму функцию я добил. Вот код, кому интересно:
<код-1> Binary textHandle = new Binary(32); Binary textLength = new Binary(16); DLLFunction PEGetErrorText; ... ; PEGetErrorText.returns(ExtTypes::Byte); PEGetErrorText.arg(ExtTypes::Word, ExtTypes::Pointer, ExtTypes::Pointer); if (!PEGetErrorText.call(_jn, textHandle, textLength)) throw error("Ошибка вызова PEGetErrorText"); </код-1> А вот дальше опять начались непонятки. Дело в том, что функция PEGetErrorText вызывается в спаринге с PEGetHandleString. Вот описание обоих функций: BOOL CRPE_API PEGetErrorText ( short printJob, HANDLE FAR *textHandle, short Far *textLength ); BOOL CRPE_API PEGetHandleString ( HANDLE textHandle, char FAR *buffer, short bufferLength ); А вот пример использования их на некогда родном родном ++ HANDLE textHandle; short textLength; char *errorText; PEGetErrorText ( hJob, &textHandle, &textLength ); errorText = (char*)malloc(textLength); PEGetHandleString(textHandle, errorText, textLength); после чего в errorText текстовое описание последней ошибки, связанной с CR Print Engine. Вызываю PEGetHandleString таким образом (после выполнения <код-1>) ... Binary errorText; ... ; ... PEGetHandleString = new DLLFunction(crdll, "PEGetHandleString"); PEGetHandleString.returns(ExtTypes::Byte); PEGetHandleString.arg(ExtTypes: ![]() ExtTypes::Pointer, ExtTypes::Word); if (!PEGetHandleString.call(textHandle, errorText, textLength)) throw error("Неудачный вызов PEGetHandleString"); После этого кода PEGetHandleString всегда возвращает false т.е. что-то опять с входными параметрами функции. Я вот думал, может параметры функции PEGetErrorText textHandle и textLength нужно как-то преобразовать, поскольку они описаны как указатели (ниразу не работал с ними в аксапте)? Пробовал такой вариант Binary errorText; int errCode; HWND h; int len; h = textHandle.dWord(8); // всегда = 0 ![]() len = textLength.Word(8); // всегда = 0 :'(( errorText = new Binary(textLength); if (!PEGetHandleString.call(h, errorText, len)) ... результат вызова PEGetHandleString тот же - false. Может есть у кого идеи, как обработать указатели? |
|