Форум: "Основная";
Текущий архив: 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.049 c