Index: src/client/c/hu/varadiistvan/xplra/xplra.cc
===================================================================
--- src/client/c/hu/varadiistvan/xplra/xplra.cc	(revision 23)
+++ src/client/c/hu/varadiistvan/xplra/xplra.cc	(revision 24)
@@ -414,4 +414,95 @@
 //------------------------------------------------------------------------------
 
+extern "C" ssize_t xplra_get_float_array(float* dest, size_t length, size_t offset,
+                                         int connectionID, const char* name)
+{
+    Connection* connection = Slot::getConnection(connectionID);
+    if (connection==0) return -1;
+    try {
+        return connection->getFloatArray(name, dest, length, offset);
+    } catch (...) {
+        connection->handleException();
+        return -1;
+    }
+}
+
+/*----------------------------------------------------------------------------*/
+
+extern "C" float* xplra_get_float_array_new(size_t* length, size_t offset,
+                                            int connectionID, const char* name)
+{
+    Connection* connection = Slot::getConnection(connectionID);
+    if (connection==0) return 0;
+    try {
+        return connection->getFloatArray(name, *length, offset);
+    } catch (...) {
+        connection->handleException();
+        return 0;
+    }
+}
+
+//------------------------------------------------------------------------------
+
+extern "C" ssize_t xplra_get_int_array(int32_t* dest, size_t length, size_t offset,
+                                       int connectionID, const char* name)
+{
+    Connection* connection = Slot::getConnection(connectionID);
+    if (connection==0) return -1;
+    try {
+        return connection->getIntArray(name, dest, length, offset);
+    } catch (...) {
+        connection->handleException();
+        return -1;
+    }
+}
+
+/*----------------------------------------------------------------------------*/
+
+extern "C" int32_t* xplra_get_int_array_new(size_t* length, size_t offset,
+                                            int connectionID, const char* name)
+{
+    Connection* connection = Slot::getConnection(connectionID);
+    if (connection==0) return 0;
+    try {
+        return connection->getIntArray(name, *length, offset);
+    } catch (...) {
+        connection->handleException();
+        return 0;
+    }
+}
+
+//------------------------------------------------------------------------------
+
+extern "C" ssize_t xplra_get_byte_array(void* dest, size_t length, size_t offset,
+                                        int connectionID, const char* name)
+{
+    Connection* connection = Slot::getConnection(connectionID);
+    if (connection==0) return -1;
+    try {
+        return connection->getByteArray(name, reinterpret_cast<uint8_t*>(dest),
+                                        length, offset);
+    } catch (...) {
+        connection->handleException();
+        return -1;
+    }
+}
+
+/*----------------------------------------------------------------------------*/
+
+extern "C" uint8_t* xplra_get_byte_array_new(size_t* length, size_t offset,
+                                             int connectionID, const char* name)
+{
+    Connection* connection = Slot::getConnection(connectionID);
+    if (connection==0) return 0;
+    try {
+        return connection->getByteArray(name, *length, offset);
+    } catch (...) {
+        connection->handleException();
+        return 0;
+    }
+}
+
+//------------------------------------------------------------------------------
+
 extern "C" int xplra_disconnect(int connectionID)
 {
Index: src/client/c/hu/varadiistvan/xplra/xplra.h
===================================================================
--- src/client/c/hu/varadiistvan/xplra/xplra.h	(revision 23)
+++ src/client/c/hu/varadiistvan/xplra/xplra.h	(revision 24)
@@ -32,4 +32,9 @@
 /*----------------------------------------------------------------------------*/
 
+#include <stdlib.h>
+#include <inttypes.h>
+
+/*----------------------------------------------------------------------------*/
+
 #ifdef __cplusplus
 extern "C" {
@@ -150,4 +155,94 @@
 
 /**
+ * Get an array of floats into a buffer.
+ *
+ * @param dest the array into which to get the data
+ * @param length the length of the destination buffer
+ * @param offset the offset from which to query the array
+ *
+ * @return the actual number of elements returned in case of success,
+ * -1 on error
+ */
+ssize_t xplra_get_float_array(float* dest, size_t length, size_t offset,
+                              int connectionID, const char* name);
+
+/*----------------------------------------------------------------------------*/
+
+/**
+ * Get an array of floats into a newly allocated buffer.
+ *
+ * @param length pointer to a variable containing the length to
+ * query. On return it will be set to the actual length, which can be
+ * less than or equal to the input value.
+ * @param offset the offset from which to query the array
+ *
+ * @return the new array on success, 0 on error
+ */
+float* xplra_get_float_array_new(size_t* length, size_t offset,
+                                 int connectionID, const char* name);
+
+/*----------------------------------------------------------------------------*/
+
+/**
+ * Get an array of integers into a buffer.
+ *
+ * @param dest the array into which to get the data
+ * @param length the length of the destination buffer
+ * @param offset the offset from which to query the array
+ *
+ * @return the actual number of elements returned in case of success,
+ * -1 on error
+ */
+ssize_t xplra_get_int_array(int32_t* dest, size_t length, size_t offset,
+                            int connectionID, const char* name);
+
+/*----------------------------------------------------------------------------*/
+
+/**
+ * Get an array of integers into a newly allocated buffer.
+ *
+ * @param length pointer to a variable containing the length to
+ * query. On return it will be set to the actual length, which can be
+ * less than or equal to the input value.
+ * @param offset the offset from which to query the array
+ *
+ * @return the new array on success, 0 on error
+ */
+int32_t* xplra_get_int_array_new(size_t* length, size_t offset,
+                                 int connectionID, const char* name);
+
+/*----------------------------------------------------------------------------*/
+
+/**
+ * Get an array of bytes into a buffer.
+ *
+ * @param dest the array into which to get the data
+ * @param length the length of the destination buffer
+ * @param offset the offset from which to query the array
+ *
+ * @return the actual number of elements returned in case of success,
+ * -1 on error
+ */
+ssize_t xplra_get_byte_array(void* dest, size_t length, size_t offset,
+                             int connectionID, const char* name);
+
+/*----------------------------------------------------------------------------*/
+
+/**
+ * Get an array of bytes into a newly allocated buffer.
+ *
+ * @param length pointer to a variable containing the length to
+ * query. On return it will be set to the actual length, which can be
+ * less than or equal to the input value.
+ * @param offset the offset from which to query the array
+ *
+ * @return the new array on success, 0 on error
+ */
+uint8_t* xplra_get_byte_array_new(size_t* length, size_t offset,
+                                  int connectionID, const char* name);
+
+/*----------------------------------------------------------------------------*/
+
+/**
  * Destroy the connection with the given ID.
  *
Index: test/basicctest.c
===================================================================
--- test/basicctest.c	(revision 23)
+++ test/basicctest.c	(revision 24)
@@ -42,4 +42,12 @@
     float spoolTime = 0.0;
     double latitude = 0.0, longitude = 0.0;
+    ssize_t length, i;
+    size_t length1, j;
+    uint8_t result[260];
+    uint8_t* result1 = 0;
+    int32_t result3[8];
+    int32_t* result4 = 0;
+    float result5[8];
+    float* result6 = 0;
 
     printf("Connection to X-Plane...\n");
@@ -100,4 +108,63 @@
     printf("The coordinates: %f, %f\n\n", latitude, longitude);
 
+    printf("Querying the aircraft's description as an array of a fixed size...\n");
+    length = xplra_get_byte_array(result, sizeof(result)/sizeof(result[0]),
+                                  0, connectionID,
+                                  "sim/aircraft/view/acf_descrip");
+    if (length<0) goto error;
+    printf("Got %zu bytes, as a string: '%s'\n\n", length, result);
+
+    printf("Querying the aircraft's description as a dynamically created array with an offset of 3...\n");
+    length1 = 0;
+    result1 = xplra_get_byte_array_new(&length1, 3, connectionID,
+                                       "sim/aircraft/view/acf_descrip");
+    if (result1==0) goto error;
+    printf("Got %zu bytes, as a string: '%s'\n\n", length1, result1);
+
+    printf("Querying the aircraft's engine types as an array of a fixed size...\n");
+    length = xplra_get_int_array(result3, sizeof(result3)/sizeof(result3[0]), 0,
+                                 connectionID, "sim/aircraft/prop/acf_en_type");
+
+    if (length<0) goto error;
+    printf("Got %zd values:", length);
+    for(i = 0; i<length; ++i) {
+        if (i>0) printf(",");
+        printf(" %d", result3[i]);
+    }
+    printf("\n\n");
+
+    printf("Querying the aircraft's engine types as a dynamically created array...\n");
+    length1 = 0;
+    result4 = xplra_get_int_array_new(&length1, 0, connectionID,
+                                      "sim/aircraft/prop/acf_en_type");
+    printf("Got %zu values:", length1);
+    for(j = 0; j<length1; ++j) {
+        if (j>0) printf(",");
+        printf(" %d", result4[j]);
+    }
+    printf("\n\n");
+
+    printf("Querying the aircraft's propeller direction as an array of a fixed size...\n");
+    length = xplra_get_float_array(result5, sizeof(result5)/sizeof(result5[0]),
+                                   0, connectionID,
+                                   "sim/aircraft/prop/acf_prop_dir");
+    printf("Got %zd values:", length);
+    for(i = 0; i<length; ++i) {
+        if (i>0) printf(",");
+        printf(" %f", result5[i]);
+    }
+    printf("\n\n");
+
+    printf("Querying the aircraft's propeller direction as a dynamically created array...\n");
+    length1 = 0;
+    result6 = xplra_get_float_array_new(&length1, 0, connectionID,
+                                        "sim/aircraft/prop/acf_prop_dir");
+    printf("Got %zu values:", length1);
+    for(j = 0; j<length1; ++j) {
+        if (j>0) printf(",");
+        printf(" %f", result6[j]);
+    }
+    printf("\n\n");
+
     goto cleanup;
 error:
@@ -116,59 +183,4 @@
     // try {
 
-    //     printf("Querying the aircraft's description as an array of a fixed size...\n");
-    //     uint8_t result[260];
-    //     size_t length = xplane.getByteArray("sim/aircraft/view/acf_descrip",
-    //                                         result, sizeof(result)/sizeof(result[0]));
-    //     printf("Got %zu bytes, as a string: '%s'\n\n", length, result);
-
-    //     printf("Querying the aircraft's description as a dynamically created array...\n");
-    //     uint8_t* result1 = xplane.getByteArray("sim/aircraft/view/acf_descrip", length);
-    //     printf("Got %zu bytes, as a string: '%s'\n\n", length, result1);
-
-    //     printf("Querying the aircraft's description as a string, with an offset of 3...\n");
-    //     string result2 = xplane.getString("sim/aircraft/view/acf_descrip", 3);
-    //     printf("Got: '%s'\n\n", result2.c_str());
-
-    //     printf("Querying the aircraft's engine types as an array of a fixed size...\n");
-    //     int32_t result3[8];
-    //     length = xplane.getIntArray("sim/aircraft/prop/acf_en_type",
-    //                                 result3, sizeof(result3)/sizeof(result3[0]));
-    //     printf("Got %zu values:", length);
-    //     for(size_t i = 0; i<length; ++i) {
-    //         if (i>0) printf(",");
-    //         printf(" %d", result3[i]);
-    //     }
-    //     printf("\n\n");
-
-    //     printf("Querying the aircraft's engine types as a dynamically created array...\n");
-    //     length = 0;
-    //     int32_t* result4 = xplane.getIntArray("sim/aircraft/prop/acf_en_type", length);
-    //     printf("Got %zu values:", length);
-    //     for(size_t i = 0; i<length; ++i) {
-    //         if (i>0) printf(",");
-    //         printf(" %d", result4[i]);
-    //     }
-    //     printf("\n\n");
-
-    //     printf("Querying the aircraft's propeller direction as an array of a fixed size...\n");
-    //     float result5[8];
-    //     length = xplane.getFloatArray("sim/aircraft/prop/acf_prop_dir",
-    //                                   result5, sizeof(result5)/sizeof(result5[0]));
-    //     printf("Got %zu values:", length);
-    //     for(size_t i = 0; i<length; ++i) {
-    //         if (i>0) printf(",");
-    //         printf(" %f", result5[i]);
-    //     }
-    //     printf("\n\n");
-
-    //     printf("Querying the aircraft's propeller direction as a dynamically created array...\n");
-    //     length = 0;
-    //     float* result6 = xplane.getFloatArray("sim/aircraft/prop/acf_prop_dir", length);
-    //     printf("Got %zu values:", length);
-    //     for(size_t i = 0; i<length; ++i) {
-    //         if (i>0) printf(",");
-    //         printf(" %f", result6[i]);
-    //     }
-    //     printf("\n\n");
 
     //     printf("Setting the number of the engines to %d...\n", numEngines + 1);
