Для начала: 
1. Вы забываете о необходимости указания кодировки файла :( 
2. практика работы с wxFrame показывает, что для главного окна целесообразно вызывать Destroy руками, т.е
# в конструкторе делаем привязку к событию        
self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
# ну и сама функция
def OnCloseWindow (self, event) :
    # сначала убираем свой собственный мусор,
    # если таковой имеется, а затем...
    self.Destroy()
что касается ctypes, рекомендую посмотреть вот это: 
http://python.net/crew/theller/ctypes/tutorial.htmlну и вот пример вызова Вашей функции
from ctypes import *
GetArray = cdll.mydll.GetArray
def get_array () :
    # память под массив должна выделять вызывающая программа
    # Ваша библиотека не предоставляет средств для определения размера данных,
    # перепешите функцию, скажем следующим образом:
    # если передается нулевой указатель на массив - значит нужно вернуть общий размер
    # данных, в противном случае - размер реально прочитанных данных
    # это у Вас пока не предусмотрено :)
    # size = GetArray("Данные.txt", None)
    # имеем 12 строк (пришлось залезть в файл и посчитать) по три столбца,
    # значит размер массива:
    size = 24 # 12 * 2 в( Вашем файле их всего 2 :()
    # выделяем память под массив
    dataBuffer = (size * c_float)()
    # вызываем Вашу функцию
    GetArray("Данные.txt", byref(dataBuffer))
    # каким-то образом проверяем все ли считано и, ели нет ошибок продолжаем
    rowCount = size / 2 # число столбцов известно заранее (в Вашем файле их 2 :()
    for i in xrange(rowCount) :
        print(u"строка %02d:" % i, end=" ")
        for j in xrange(2) :
            print(dataBuffer[i*2+j], end=" | ")
        print(end="\n")