Guest
Новичок
|
Мне необходимо написать DLL, которая бы создавала и заполняла двумерный массив (матрицу). Основная программа должна считывать этот массив. Я нашел одну ссылку, в которой это делается через записи. Вот так: В основной программе и в самой DLL создается тип type Matr=array of array of Extended; tParams=record A: Matr; //A-двумерный массив end; pParams=^tParams; ………………… В DLL создается соответствующая процедура: Procedure Matrix_A (p: Pointer); //Процедура, заполняющая массив А begin with pParams(p)^ do begin ………………………………… ..……………………………….. end; end; И массив A считывается в основной программе в массив С: Var С: Matr; variable: tParams; implementation ………………………….. Procedure Matrix_A (p:Pointer); external ' ../DLL/My_DLL.dll'; ……………………………………… Matrix_A (@variable); C:=variable.A; Короче, все вроде бы работает нормально. Массив создается, считывается правильно. Но когда я закрываю основную программу выдается глюк: Project Project1.exe raised exception class EInvalidPointer with message 'Invalid pointer operation'. Process stopped. Use Step or Run to continue. Если процедурку, которая создает массив засунуть в основную программу, а DLL вообще не использовать, то никаких глюков не выводится.
|