DELPHI DLL :/

Legalnl

Użytkownik
Dołączył
Październik 8, 2008
Posty
828
Siemanko, piszę sobie bibliotekę do kanałow RSS, i mam taki problem, otoż biblioteka ladnie się skompiluje a w aplikacji wywala mi bląd typu :
Przechwytywanie.JPG


i kurde juz 2 dzien kombinuje i nic :/ dodam ze oczywiscie importuje funkcję (zwracam wynik pracy do EXE) poprzez Pchar. Czy wie ktoś jakie mogą być jeszcze powody takich "jaj"
<
dodam ze przesylam duzą ilość tekstu.

Przykladowy okrojony do pobierania kodu kanału kod biblioteki:
Kod:
function RSS2(link:pchar) : pchar; stdcall;
var
pobier : tidhttp;
begin
//zalozmy ze z gory jest LINK := '[url]http://wiadomosci.onet.pl/11,kategoria.rss';[/url]
pobier := tidhttp.Create(nil);
rss2 := pchar(pobier.Get(link));
pobier.Free;
end;

exports
RSS2 name 'RSS2';

pozdrawiam.
 

lol_ek

Użytkownik
Dołączył
Maj 30, 2003
Posty
306
Daję sobie uciąć to i owo, że odwołujesz się do czegoś co nie istnieje. ;]
 

Legalnl

Użytkownik
Dołączył
Październik 8, 2008
Posty
828
mam tak:
Kod:
type
  function RSS(link:pchar) : pchar; stdcall external 'project2.dll' name 'RSS2';

no a pobieram z dll:
Kod:
memo1.Text := rss('[url]http://wiadomosci.onet.pl/11,kategoria.rss'[/url]);

w sumie podam kod biblioteki orginalny nad jakim pracowalem
<
:
Kod:
uses  SysUtils, Classes, idhttp, windows, dialogs;
const
t = '<title>'; // liczba znakow: 7
tz = '</title>'; // 8
w = '<description>'; // 13
wz = '</description>'; // 14
item = '<item>';

function RSS(link:pchar) : pchar; stdcall;
var
pobier : tidhttp;
s, srss,SEND : string;
x,y,z : integer;
begin
pobier := tidhttp.Create(nil); 
s := pobier.Get(link); // pobier kanał rss do zmiennej s
           for y:=0 to 10 do begin
// opis punktow ponizej
1.                 delete(s,1,( pos(item,s)));
2.                 srss := copy(s, pos(t,s)+7, pos(tz,s)-15) + '@/';  // temat wiadomosci i rozdzielacz @/ tematu od wiadomosci
3.                 delete(s,1,  pos(w,s)-2);
4.                 srss := copy(s,pos(w,s)+13, pos(wz,s)-15) + '@+'; // opis wiadomosci i rozdzielacz @+ jednej wiadomosci od drugiej
5.                 SEND := SEND + sRSS;
           end;
      RSS := pchar(SEND);
pobier.Free;
end;
exports
 rss name 'rss';

begin
end.

krotki opis:
1. skasowanie w kodzie kanału RSS wszystkiego do znacznika <item> // czyli skasowanie smieci, gornej czesci kodu RSS
2. przypisanie do zmiennes srss kawakla kodu miedzy <title> do </title> (temat wiadomosci)
3. skasowanie wszystkiego od początku do przed znacznikiem <description>
4. przypisanie do zmiennej srss + srss kawalka kodu miedzy <description> do </description> (opis wiadomosci - streszczenie)
5. Przypisanie do send kolejnej wiadomosci ( zbieranie wszystkich jako jedna calosc rozdzielona znakiem '@+'
całość pętli polega na przeslaniu 10 wiadomosci skladających się z tematu wiadomosci i jego tresci. pojedyncze wiadomosci są lączone poprzez dodanie '@+'.
temat i tresc są rozdzielane (rozrozniane) poprzez dodanie '@/'

Mam nadzieje ze w miarę zrozumiale opisalem, zeby nie trzeba było za duzo się zastanawiać co do czego słuzy
<
 

lol_ek

Użytkownik
Dołączył
Maj 30, 2003
Posty
306
Kanał RRS na pewno ma co najmniej 11 wiadomości ?

Jestem pewien, ze RRS oparty jest o XMLa, a co za tym idzie nie ma sensu wyważać otwartych drzwi. Skorzystaj z gotowych mechanizmów, które jeśli się nie mylę są już w D7.
 

Legalnl

Użytkownik
Dołączył
Październik 8, 2008
Posty
828
hmm, no wiesZ nie koniecznie ma 11 wiadomosci, moze miec i 6, zalezy jaki, ale czy to moze być powodem błędu?? skoro mowisz ze odłołuje się do czegoś co nie istnieje to mozliwe jest ze wkoncu (w skutek kasowania) zabraknie i pos zwroci wartość 0. no ale jak by się zabezpieczyć to mozna by zrobić ze jak zwroci wartość 0 to zakonczy pętle (uzyło by się inej pętli, np repeat)

Tak RSS jest opary o XML, wycinam z niego po znalezieniu konkretne rzeczy ale skoro twierdzisz ze wynaleziono juz takie cudo to chyba pozostaje mi poszukac
<
 
Do góry Bottom