Error - DLL
3 отговора
57 прегледа
Error - DLL
Когато извиквам дадена функция от Dll файл
и понякога ми дава грешка: "Invalid pointer operation."
Как да я избегна? Благодаря ви предварително за мненията!
и понякога ми дава грешка: "Invalid pointer operation."
Как да я избегна? Благодаря ви предварително за мненията!
Ами провери параметрите
Въпросът ти е много общ и неопределен.
Провери параметрите, с които извикваш функцията от ДЛЛ.
Някой от пойнтерите е инвалид.
Може и по-подробно да обясниш тук :)
Провери параметрите, с които извикваш функцията от ДЛЛ.
Някой от пойнтерите е инвалид.
Може и по-подробно да обясниш тук :)
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);
ебало си майката. Обаче така няма да ти гърми. никога.
Дай да я видим тази функция!
Защо се счупи?
Защото каручката се счупи.
Да аз разбрах всичко.
Ето и отговора.
Гледай сега приятелю. Неща опират от 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);
ебало си майката. Обаче така няма да ти гърми. никога.
Дай да я видим тази функция!
Бъркаш :)
Точно като pChar може да "препълниш" паметта (ако не ги чистиш), а ако са обикновенни стрингове може да стигнеш до Access violation.
Въобще, възможности за грешка много.
Въобще, възможности за грешка много.