Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.12;
Скачать: CL | DM;

Вниз

Проблема с DLL   Найти похожие ветки 

 
User1   (2004-11-29 10:43) [0]

Уважаемые мастера, помогите мне разобраться что не так в 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 ....."

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


 
Amoeba ©   (2004-11-29 10:47) [1]

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


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


> Amoeba ©

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


 
Alexander Panov ©   (2004-11-29 11:08) [3]

User1   (29.11.04 10:56) [2]

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


 
User1   (2004-11-29 11:25) [4]


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


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


 
Alexander Panov ©   (2004-11-29 11:33) [5]

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


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


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

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


 
ssk ©   (2004-11-29 11:42) [7]

а у меня без 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;


 
icWasya ©   (2004-11-29 14:10) [8]

>User1   [1] [4]

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

а в проекте

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

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



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

Текущий архив: 2004.12.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
14-1100801167
OneFragLeft
2004-11-18 21:06
2004.12.12
TStringProperty - откуда?


14-1101161834
Rand
2004-11-23 01:17
2004.12.12
Я вернулся!


3-1100178736
Layner
2004-11-11 16:12
2004.12.12
Люди добрые, поможите вставить аппостоф в SQL таблицу.


1-1101573700
Dmitry_04
2004-11-27 19:41
2004.12.12
Есть ли какойнибудь компонент для создания меню как в RealPlayer?


1-1101652454
Жуков
2004-11-28 17:34
2004.12.12
Параметры в тексте