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

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

Проблема с DLL


User1 ©   (2004-11-29 10:43:00) 

Уважаемые мастера, помогите мне разобраться что не так в dll:

Код DLL:
uses
 ShareMem,
 SysUtils,
 Classes,
 winsock;

function LocalIP: string;
type
TaPInAddr=array [0..10] of PInAddr;
PaPInAddr=^TaPInAddr;
var
phe:PHostEnt;
pptr:PaPInAddr;
Buffer:array [0..63] of char;
i:Integer;
GInitData:TWSADATA;
begin
WSAStartup($101, GInitData);
Result:='';
GetHostName(Buffer, SizeOf(Buffer));
phe:=GetHostByName(buffer);
if phe=nil then Exit;
pptr:=PaPInAddr(Phe^.h_addr_list);
i:=0;
while pptr^[i]<>nil do
begin
 result:=StrPas(inet_ntoa(pptr^[i]^));
 Inc(i);
end;
WSACleanup;
end;

exports LocalIP;

begin
end.


Создаю новый проект. Кидаю в туже папку откомпилированнуб DLL. кидаю на форму Edit и Button.. функцию обьявляю как: function LocalIP:string; stdcall; external 'main1.dll';

в обработчике Button.onClick пишу:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Edit1.Text:=LocalIP;
end;

И в итоге при нажаттии на конпку - вылетает ошибка: "...Invalid pointer operation ....."

Мастера скажите пожалуйста в чем проблема?


icWasya   (2004-11-29 14:10:00) [1]

>User1   [1] [4]

у тебя в DLL
function LocalIP: string;

а в проекте

function LocalIP:string; stdcall;external 'main1.dll';

нужно соглашения о вызовах делать одинаковыми и в DLL b в проекте


ssk   (2004-11-29 11:42:00) [2]

а у меня без ShareMem все прекрасно работает:

код DLL:

library net;

uses
 WinSock;

function LocalIP: PAnsiChar; stdcall;
type
 TaPInAddr = array [0..10] of PInAddr;
 PaPInAddr = ^TaPInAddr;
var
 phe       : PHostEnt;
 pptr      : PaPInAddr;
 Buffer    : array [0..63] of char;
 i         : Integer;
 GInitData : TWSADATA;
begin
 WSAStartup($101, GInitData);
 Result := '';
 GetHostName(Buffer, SizeOf(Buffer));
 phe := GetHostByName(buffer);
 if phe = nil then
   Exit;
 pptr := PaPInAddr(Phe^.h_addr_list);
 i := 0;
 while pptr^[i] <> nil do
   begin
     result := inet_ntoa(pptr^[i]^);
     Inc(i);
   end;
 WSACleanup;
end;

exports
 LocalIP;
end.


В программе:
var
 Form1: TForm1;

 function LocalIP: PAnsiChar; stdcall; external 'net.dll';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Caption := LocalIP;
end;


Michael Makushev   (2004-11-29 11:37:00) [3]

У меня была та же проблема. В чистом проекте Delphi на DLL указано что необходимо юзать ту же библиотеку в первой строке. Если не юзать то все ОК. То есть и со строками работает и с WideString. А если заюзать, то все...сбивает все насмерть


Alexander Panov   (2004-11-29 11:33:00) [4]

User1   (29.11.04 11:25) [4]
Установил.. теперь нажав на кнопку пишеться айпи, зато когда я закрываю приложение вылазит таже ошибка!


Приведи полностью код библиотеки и код тестового проекта...


User1   (2004-11-29 11:25:00) [5]


> В новом проекте установил в .DPR Uses ShareMem?


Установил.. теперь нажав на кнопку пишеться айпи, зато когда я закрываю приложение вылазит таже ошибка!


Alexander Panov   (2004-11-29 11:08:00) [6]

User1   (29.11.04 10:56) [2]

В новом проекте установил в .DPR Uses ShareMem?


User1   (2004-11-29 10:56:00) [7]


> Amoeba ©

Отладить можно программу.. а dll как ее можно отладить?
В отладке программы именно ругаеться когда вызываеться функция из dll!


Amoeba   (2004-11-29 10:47:00) [8]

А для начала провести отладку DLL, чтобы локализовать ошибку в коде, религия не позволяет?


Наверх

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