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

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

UDF [D7, XP]


Страницы:   1 2 3 4 5

Irish_34 ©   (2007-12-10 20:02:00) 

Привет ВСЕМ, помогите пожалусто UDF, начиная работать в процедуре "спотыкается" об чего, я уже не знаю в чем и ошибка и чге я некоректно что обозвала

DECLARE EXTERNAL FUNCTION CEX6
   VARCHAR(50)
RETURNS VARCHAR(50) BY DESCRIPTOR
ENTRY_POINT 'psc6' MODULE_NAME 'PDL6.dll'

function psc6(var s:PChar):PChar;cdecl;export;
var
j1,i1:byte;
j: PSmallInt;
s1: string;
 begin
 j:=nil;
 j1:=0;
 i1:=0;
 if ((s=nil) or (s='0') or (s='')) then
  Result:='0'
  else
   if StrPos(s,'6')<>nil then
    begin
     j:=PSmallInt(StrPos(s,'6'));
     s1:=PChar(s)^;
     Result:='';
     delete(s1,1,j^+1);
     if Length(s1)=1 then //s:=copy(s1,1,1)
     StrPLcopy(Result,s1,1)
     else
      begin
       for i1:=1 to length(s1) do
        if ((s1[i1]=',') or (s1[i1]='.') or (s1[i1]=';') or (s1[i1]=' '))
        then
         begin
          delete(s1,i1,length(s1));
            StrPLcopy(Result,s1,length(s1));
         end
        else StrPLcopy(Result,s1,2);
       end;
       end
    else
   Result:='';
   end;


irish_34   (2007-12-28 20:48:00) [1]


> Держи, горемычная)

:* спасибо огромное, но и твоя и моя работают только начиная с 1.5 FB, а 1.0FB...даже и не знаю как он может работать с UDF.и я сделала проще установила 1.5


Сергей М.   (2007-12-27 09:57:00) [2]

Держи, горемычная)


DECLARE EXTERNAL FUNCTION CEX6
 CSTRING(32767)
RETURNS PARAMETER 1
ENTRY_POINT 'psc6' MODULE_NAME 'PDL6.dll'

function psc6(AString:PChar):PChar; cdecl;

function ExtractSubstring(AString: String): String;
const
 ld: PChar = '.,; ';
 rd: PChar = '.,; )';
var
 i,n,k,b: Integer;

function IsDelimiter(ADelimiters: PChar; ASymbol: Char): Boolean;
var
 i: Integer;
begin
 i := 0;
 Result := False;
 while (i < n) and not Result do
 begin
   Result := ASymbol = ADelimiters[i];
   Inc(i);
 end;
end;

begin
 Result := '0';
 if AString[1] <> '6' then Exit;
 i := 2;
 k := Length(AString);
 n := StrLen(ld);
 while (i <= k) and not IsDelimiter(ld, AString[i]) do Inc(i);
 Inc(i);
 b := i;
 n := StrLen(rd);
 while (i <= k) and not IsDelimiter(rd, AString[i]) do Inc(i);
 Result := Copy(AString, b, i-b);
 if Result='' then Result := '0';
end;

begin
Result := lstrcpy(AString, PChar(ExtractSubstring(AString)));
end;


irish_34   (2007-12-26 18:19:00) [3]

6-ка всегда является первым символом строки


Сергей М.   (2007-12-26 09:22:00) [4]


> irish_34   (25.12.07 18:54) [93]


Т.е. в интересующих тебя строках 6-ка всегда является первымсимволом строки ? Или есль другие варианты, где 6-ка не первый символ ?

Например, 7. 6. 15п.11.15 ?


irish_34   (2007-12-25 19:05:00) [5]


> Внимательно прочитай статью указанную в [1], хорошая статья

ды читала я, что конкретно не так-то?


trubin   (2007-12-25 19:02:00) [6]

Внимательно прочитай статью указанную в [1], хорошая статья


irish_34   (2007-12-25 18:56:00) [7]


> Что, проблема даже скопировать шаблон из [18] "один в один"
> ?)

Переделывала жи


irish_34   (2007-12-25 18:54:00) [8]


> Приведи десяток различных возможных вариантов строковых
> значений, которые ожидаются в кач-ве параметров твоей ф-
> ции, и выдели в них жирным подстроки, которые должна возвращать
> ф-ция ..

6, 4,10
6(рез); 7;103;5
6. 8.12.10.9
6. 21.15.21.5.21
6. 15п.11.15
6. 10  чпу
6. 5.15.5.7.5.7.5
6. 15(рихт.)8.15.13(шл.)8  чпу


palva   (2007-12-25 13:10:00) [9]

Desdechado ©   (25.12.07 12:15) [91]
OK


Desdechado   (2007-12-25 12:15:00) [10]

> palva ©   (25.12.07 12:10) [90]
Разница выделена была в том посте, который ты комментировал вначале. Это соглашение о вызовах stdcall.
А имена, которые ты зацепил, действительно синонимы, с этим я и не спорю.


palva   (2007-12-25 12:10:00) [11]


> Desdechado ©   (25.12.07 11:15) [88]
> > lstrcpy, lstrcpyA - это без разницы.
> Разница выделена.

Вообще да. Разница есть. В имени. Но я имел в виду, что без разницы, какое имя указывать. Это одна и та же функция.

{$APPTYPE CONSOLE}
uses Windows;
var
 h: THandle;
 f: FarProc;
begin
 h := LoadLibrary('Kernel32.dll');
 f := GetProcAddress(h, 'lstrcpy');
 WriteLn(Integer(f)); // 2088812033
 f := GetProcAddress(h, 'lstrcpyA');
 WriteLn(Integer(f)); // 2088812033
end.


Сергей М.   (2007-12-25 11:56:00) [12]


> irish_34   (24.12.07 22:04) [83]
>
>


Приведи десяток различных возможных вариантов строковых значений, которые ожидаются в кач-ве параметров твоей ф-ции, и выдели в них жирным подстроки, которые должна возвращать ф-ция ..


Desdechado   (2007-12-25 11:15:00) [13]

> lstrcpy, lstrcpyA - это без разницы.
Разница выделена.


Сергей М.   (2007-12-25 08:21:00) [14]


> irish_34   (24.12.07 22:03) [82]


> используется один общий менеджер


Общий с кем?


> irish_34   (24.12.07 22:29) [85]


Отсебячина.

В [18] ф-ция декларирована иначе.

Что, проблема даже скопировать шаблон из [18] "один в один" ?)


palva   (2007-12-24 22:58:00) [15]

trubin ©   (24.12.07 19:18) [76]
Вот это справедливо.


irish_34   (2007-12-24 22:29:00) [16]


> Еще, Напишите здесь, как вы описали UDF в FireBird.

DECLARE EXTERNAL FUNCTION CEX6
   CSTRING(50)
RETURNS CSTRING(50)
ENTRY_POINT 'psc6' MODULE_NAME 'Pr1.dll'


palva   (2007-12-24 22:15:00) [17]

> ххх
Тогда содержательно ваша программа работает неправильно. Возможно из-за ошибок, которых вы не ожидали, на ваших тестовых данных где-нибудь переполняется буфер.

> проблема я так поняла в некорректной работе с PChar
А для проверки работы с PChar можно временно выкинуть всю начинку и присвоить выходному параметру константное значение. По-крайней мере поймете, из-за чего программа валится.

Еще, Напишите здесь, как вы описали UDF в FireBird.


irish_34   (2007-12-24 22:04:00) [18]


> Ваша программа должна выделить из нее строку 'yyy' Так?

ххх, но это не важно что происходит со строками, проблема я так поняла в некорректной работе с PChar


irish_34   (2007-12-24 22:03:00) [19]


> А смысл?

чтоб менше ошибок было как ещё в одном разговоре написано, используется один общий менеджер


palva   (2007-12-24 21:38:00) [20]

Никак не могу приспособиться к вашей логике. Возьмем, например, такую строку:
'1234 5 6;xxx,yyy'
Ваша программа должна выделить из нее строку 'yyy' Так?


Страницы:   1 2 3 4 5

Наверх

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