Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Опять про DLL Delphi для C++ Builder [D5, D6, Win95/98, NT4, Win2k]


S@shka ©   (2002-05-15 22:01:00) 

Народ нужен грамотный ответ
Создаю библиотеку DLL в Delphi 6 для использования ее функций в последствии в C++ Builder 5 для примера текст такой
< library mydll.dll
function TestInt (x,y:Integer):Integer; stdcall;
begin TestInt:=x+y; end;
function TestStr (a:String):String; stdcall;
begin TestStr:=a+" bla-bla-bla"; end;
exports
TestInt,TestStr;
begin
end.>
Как теперь статически или динамически исп. функции в C++ Builder
Если динамически типа...
typedef (*pf)(int,int);
hwInst=LoadLibrary("mydll.dll");
....
if (hwInst)
{
pf pfunc = (pf) GetProcAddres (hwInst,"TestInst"); //tipa
if (pfunc)
{
int b = (pfunc)(3,4);
}
}
то почему то один раз функция вызывается нормально, но если сразу вызвать еще эту же или другую то возникает исключение EAccessViolation (уже задолбало)
А как делать нигде толком найте не могу
Please HELP HELP HELP HELP HELP HELP HELP HELP HELP HELP


Игорь Шевченко   (2002-05-16 13:02:00) [1]

NailS © (16.05.02 12:51)

Тьфу, слона-то я и не приметил :-))

С уважением,


NailS   (2002-05-16 12:51:00) [2]

Дык попробуй

typedef _stdcall (*pf)(int,int);


Игорь Шевченко   (2002-05-16 12:42:00) [3]

S@shka (16.05.02 12:14)

А что отладчик говорит?


S@shka   (2002-05-16 12:36:00) [4]

2 Nails
typedef (*pf)(int,int);


NailS   (2002-05-16 12:22:00) [5]

А pf у тебя тоже stdcall?


S@shka   (2002-05-16 12:14:00) [6]

да но глюки бывают и в коде когда использую только вызов MyTestInt где типы только целые...
(тоесть вызываю подряд функцию несколько раз) к примеру
....
if (hwInst)
{
pf pfunc = (pf) GetProcAddres (hwInst,"TestInst"); //tipa
if (pfunc)
{
int b = (pfunc)(3,4);
...Memo1->Lines->Add (IntToStr(b));
b = (pfunc)(3,0);
...Memo1->Lines->Add (IntToStr(b));
b = (pfunc)(3,-);
...Memo1->Lines->Add (IntToStr(b));
}


Игорь Шевченко   (2002-05-16 12:08:00) [7]

S@shka (16.05.02 12:03)

Не использовать String, к примеру. Использовать PChar

С уважением,


S@shka   (2002-05-16 12:03:00) [8]

Неужели никто ничего.....


Наверх

Титульная страница Поиск, карта сайта Написать письмо