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

Вниз

Проблема с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.047 c
14-1101281444
Vlad Oshin
2004-11-24 10:30
2004.12.12
Просветите, экономисты, если времени не жалко


14-1100948044
Progh
2004-11-20 13:54
2004.12.12
Подскажите ХОРОШУЮ статью перехвата WIN API с примерами на Delphi


1-1101582815
Herkules-A
2004-11-27 22:13
2004.12.12
NMSMTP1.PostMessage.Body.Text переход на следущую строку


14-1101297881
Маг Похмеляйнен
2004-11-24 15:04
2004.12.12
Про девчонок и вольтмод


1-1101723610
WondeRu
2004-11-29 13:20
2004.12.12
Интерфейс объявляется как класс!??? Эт как?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский