What is the recommended way for a C basic type to be passed-by-reference to
function wanting to use it for output.
For example 'width' & 'height' here in this library unction...

  int FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document,
                          int page_index,
                          double* width,
                          double* height);

void mytestGetPageSizeByIndex(doc) {
           double width, height;
            FPDF_GetPageSizeByIndex(doc, 0, &width, &height);
            printf("width=%f, height=%f\n", width, height);
}

gives...
   width=200.000000, height=200.000000



In Pharo I'm trying...

  FFIOpaqueObject subclass: #FPDF_DOCUMENT

  FPDF_GetPageSizeByIndex__document: document
                          page_index: page_index
                          width: width
                          height: height
    ^self ffiCall: #(int FPDF_GetPageSizeByIndex(
FPDF_DOCUMENT *document,
int page_index,
          FFIFloat64 * width,
FFIFloat64 * height))


testGetPageSizeByIndex
| document page_index width height result|
PDFium FPDF_InitLibrary.
document := PDFium FPDF_LoadDocument__file_path:  helloPdf  password: ''.
width := 0.0.
height := 0.0.
page_index := 0. "Its zero based"
result := PDFium FPDF_GetPageSizeByIndex__document: document
                 page_index: 0
                 width: width
                 height: height.
PDFium FPDF_CloseDocument__document: document.
PDFium FPDF_DestroyLibrary.
self assert: document isNull not. "Document opened okay, and btw this works
for a different pageCount test"
self assert: result > 0.  "Non-zero for success. 0 for error (document or
page not found)"
self halt.


and at the halt the Inspector shows...
result = 1
width = 0.0
height = 0.0

cheers -ben

Reply via email to