Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];

Вниз

Робота с DLL   Найти похожие ветки 

 
stepan_mk ©   (2004-01-30 15:43) [0]

после вихода из процедури которая загружала dll ошиПка Access violation at address ... Write of address 00000000. Вот сорси
Dll
library schema;
uses
 SHAREMEM,SysUtils,  Classes,  Ora,  Dialogs;
{$R *.res}
function Showschema(var Orasession:TOrasession):boolean;
begin
 Showmessage("Hi I""m DLL");
 result:=true;
end;
exports
Showschema;
end.

Программа
procedure TMainForm.N21Click(Sender: TObject);
var res:boolean;
begin
H:=LoadLibrary("schema.dll");
 if H<>0
  then
   begin
    Showschema:=GetProcAddress(H,"Showschema");
    res:=Showschema(Datamodule2.Orasession1);
    while not res do
    begin
    end;
    while FreeLibrary(H) do;
   end;
end;


Showmessage отображается нормально. А вот ошипка даже не дает вийти из программи.
Что я опять не так делаю?
Когда коментирую вигрузку библиотеки то ошибка Privileged instruction


 
Digitman ©   (2004-01-30 16:15) [1]


> SHAREMEM


осознанно указан ? и в хост-проекте тоже ?

а вот этот код требует твоего пояснения :

  while not res do
   begin
   end;
   while FreeLibrary(H) do;

хоть убей не пойму , зачем здесь эти циклы


 
stepan_mk ©   (2004-01-30 16:29) [2]

SHAREMEM Есть и в основном модуле программи
while not res do
  begin
  end;

Согласен ето лишнее
while FreeLibrary(H) do;
Так рекомендовали в книге делать, что б бить увереним что dll вигрузилась. Тоесть вигружать до тех пор пока не будет вигружена


 
Digitman ©   (2004-01-30 16:47) [3]


> SHAREMEM Есть и в основном модуле программи


а чем это оправдано ?
из приведенного кода это неочевидно


> Так рекомендовали в книге делать, что б бить увереним что
> dll вигрузилась. Тоесть вигружать до тех пор пока не будет
> вигружена


чушь там написали.

ну да к делу это не относится.

Access violation at address ...

что реально видишь вместо троеточия ? это важно !


 
stepan_mk ©   (2004-01-30 16:54) [4]

Сейчас убрал из dll sharemem, и тпереь постоянно после вихода их процки видает сообщение
Access violation at ADDRESS 00D64320. Read of address FFFFFFD6
Когда убираю sharemem и из приложения то
Access violation at ADDRESS 00CB4320. Read of address FFFFFFCB
Когда убираю sharemem и из приложения (dpr) а добавляю в unit
то Privileged instruction


 
Digitman ©   (2004-01-30 16:59) [5]

я так и не понял, зачем ты sharemem туда-сюда гоняешь ..
он там зачем вообще изначально был ? можешь вразумительно ответить ?

и еще ...
а ты соглашение о вызове соблюл хоть ?


 
Digitman ©   (2004-01-30 17:01) [6]


> чушь там написали.


уточню - именно для стат.загрузки это действительно чушь


 
stepan_mk ©   (2004-01-30 17:07) [7]

SHAREMEM, в той же книге рекомендовали включать и в Длл и в модуле, причем sharemem должна била стоять первая в списке. Включать как будто для того чтоб со строками нормально работало.
Что значит соблюл ли я соглашение о визове?
Наверное ето
showschema: Function (var Orasession:TOrasession):boolean; stdcall;
Я уже кстати переделал через процедуру В Dll переписал showschema как процедуру и так же в модуле но ошибка та же.


 
Digitman ©   (2004-01-30 17:12) [8]


> Включать как будто для того чтоб со строками нормально работало


ну ты хоть вник бы, о каких конкретно ситуациях работы со строками речь там идет)

вот декларация твоей ф-ции в DLL :

function Showschema(var Orasession:TOrasession):boolean;

а вот - в хост-приложении :

showschema: Function (var Orasession:TOrasession):boolean; stdcall;

разница есть, как думаешь ?


 
stepan_mk ©   (2004-01-30 17:17) [9]

Речь идет о длинних стороках.
function Showschema(var Orasession:TOrasession):boolean;
showschema: Function (var Orasession:TOrasession):boolean; stdcall;
Разници, честно говоря, не вижу


 
Digitman ©   (2004-01-30 17:21) [10]


> Разници, честно говоря, не вижу


ну как же ? а stdcall ? я ж специально жирным выделил !
это и есть соглашение о вызове ! и оно должно быть одинаковым для вызывающего и вызываемого кода !


 
stepan_mk ©   (2004-01-30 17:24) [11]

понял шас попробую


 
stepan_mk ©   (2004-01-30 17:26) [12]

Супер!
Добавил stdcall в dll и все заработало.
Спасибо.


 
Digitman ©   (2004-01-30 17:30) [13]


> stepan_mk ©   (30.01.04 17:26) [12]


а я бы наоборот и там и там убрал, если точно знаю, что иных потенциальных сред взаимодействия кроме Делфи не будет ... ни для хост-приложения ни для библ-ки



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.037 c
9-1063393281
Legafor
2003-09-12 23:01
2004.04.04
Игра Колобки v0.005


14-1078488148
Rouse_
2004-03-05 15:02
2004.04.04
Такого давно не видел ;)))


3-1078282640
ИМХО
2004-03-03 05:57
2004.04.04
Чтение dbf файлов посредством ADO


1-1079543702
Kupnu4
2004-03-17 20:15
2004.04.04
Помогите создать объект


3-1078601952
Дмитрий2004
2004-03-06 22:39
2004.04.04
Срочно нужна помощь на счет фильтрации в ADO





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский