Error - DLL

3 отговора 57 прегледа
#1

Error - DLL

Когато извиквам дадена функция от Dll файл
и понякога ми дава грешка: "Invalid pointer operation."
Как да я избегна? Благодаря ви предварително за мненията!

Отговор
в отговор на DayDio #2

Ами провери параметрите

Въпросът ти е много общ и неопределен.
Провери параметрите, с които извикваш функцията от ДЛЛ.
Някой от пойнтерите е инвалид.

Може и по-подробно да обясниш тук :)

Отговор
в отговор на NikB #3

Re: Ами провери параметрите

Каручката се счупи.
Защо се счупи?
Защото каручката се счупи.

Да аз разбрах всичко.

Ето и отговора.

Гледай сега приятелю. Неща опират от heaps динамично и стаично зареждане-препалване на памета ама много на дълбоко и понякога става така особенно ако си написал в динамичната библиотека някой функция с параметър символен низ и после като си я заредиш тази библиотека и извикаш функцията дава грешка и то понякога я дава много след изхода от таи функция и ти се чудиш защо.

Причината е в споделената памет и тази параметри е хубаво да ги предаваш например като Pchar.

Въобще това е голям проблем.
гледай сега:

In DLL:

function GetPChar: PChar;
begin
Result := StrAlloc(13);
StrCopy(Result, 'Hello World!');
end;

procedure FreePChar(p: PChar);
begin
StrDispose(p);
end;

In EXE:

var p: PChar;
...
p := GetPChar;
// do something

// heap-friendly free
FreePChar(p);

ебало си майката. Обаче така няма да ти гърми. никога.

Дай да я видим тази функция!

Отговор
в отговор на hi #4

Бъркаш :)

Точно като pChar може да "препълниш" паметта (ако не ги чистиш), а ако са обикновенни стрингове може да стигнеш до Access violation.
Въобще, възможности за грешка много.

Отговор