Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2009, 11:03   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Скопировать SetCurrentDirectory к себе в модуль

Не очень хочется подключать Windows (итак уже до 57 кб разросся) поэтому хочу извлечь только процедуру SetCurrentDirectory вот, как она описывается там:
Код:
function SetCurrentDirectory; external kernel32 name 'SetCurrentDirectoryA';
Похоже она извлекается из библиотеки. Вот только я что-то не вижу тут разрешения dll. Если я у себя в модуле напишу:
Код:
function SetCurrentDirectory; external kernel32 name 'SetCurrentDirectoryA';
Begin
 SetCurrentDirectory(PAnsiChar(S));
End;
Будет ли это стабильно работать? Или где-то надо этот самый kernel32 подключать до описания фунок?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 13.12.2009 в 11:25.
Alex Cones вне форума Ответить с цитированием
Старый 13.12.2009, 11:57   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

делаю обычно так:
Код:
unit winplug;

interface

  function SetCurrentDirectory(lpPathName: PChar): boolean; stdcall; external 'kernel32.dll' name 'SetCurrentDirectoryA';

implementation

end.
далее цю функу вже можно использовать SetCurrentDirectory('c:');... ну или теж саме в основном проекте.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 13.12.2009, 12:16   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Огромное спасибо. А все-таки, почему в SysUtils не было указано формата библиотеки? Его можно опускать?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 13.12.2009, 12:32   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

полное описание функи либы содержится все в то-же модуле windows, когда в своем проекте жмешь левой кнопкой мыши с зажатым Ctr на функе SetCurrentDirectory оно в модуле windows перейдет на function SetCurrentDirectory; external kernel32 name 'SetCurrentDirectoryA';, уже тут жмакаешь на SetCurrentDirectory и оно выдает параметры вызова- function SetCurrentDirectory(lpPathName: PChar): BOOL; stdcall;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 13.12.2009, 12:44   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Спасибо, с вызовом разобрался, но выводит ошибку Invalig Typecast:
Код:
Procedure SCR_GTD(Frt, Snd : ShortString);
 Begin
  If Frt = 'SRG' Then SetCurrentDirectory(PAnsiChar(SRG));
 End;
SRG = ShortString;
Пробовал без PAnsiChar - несоответствие типов PAnsiChar и ShortString. Пробовал PChar -тот же typecast
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 13.12.2009 в 12:48.
Alex Cones вне форума Ответить с цитированием
Старый 13.12.2009, 13:04   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

Код:
var srg: string;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 13.12.2009, 13:05   #7
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Т.е. ограничивать нельзя? Или попробовать через промежуточную переменную?

Сделал вот так: пашет. Еще раз спасибо.
Код:
Procedure SCR_GTD(Frt, Snd : ShortString);
 Var
  BufSRG:String;
 Begin
  If Frt = 'SRG' Then
   Begin
    BufSRG := SRG;
    SetCurrentDirectory(PAnsiChar(BufSRG));
   End;
 End;
P.S. Не люблю неограниченные типы...
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 13.12.2009, 13:07   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

а какой смысл тогда в промежуточной переменной, если изначально можно задать требуемый тип, экономии не будет.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 13.12.2009, 13:16   #9
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Ну... Во-первых BufSRG должна освободить помещение сразу после выхода из процедуры (кажись...), а во-вторых мне крайне необходимо, чтобы SRG была ограниченной в 255 символов, т.к. я использую её в своей системе скриптов (Костяк составил, теперь, как говорит Mihali4 "наращиваю мясо"). SRG так и расшифровывается - StringReGister. Есть у меня еще FileReGister, BoolReGister и IntegerReGister (к слову говоря, являющийся SmallInt`ом)
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 13.12.2009, 13:21   #10
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

тогда сделай так:
Код:
var srg:SHORTSTRING;
Procedure SCR_GTD(Frt, Snd : ShortString);
 Begin
  If Frt = 'SRG' Then SetCurrentDirectory(pansichar(srg+''));
 End;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ничего себе... 3D шутер... mihali4 Gamedev - cоздание игр: Unity, OpenGL, DirectX 91 21.05.2011 13:29
Сам себе хостинг Kukkk Свободное общение 8 05.10.2009 10:03
Службы останавливаются сами по себе Ronni10 Операционные системы общие вопросы 3 01.10.2009 17:20
Несколько слов о себе../A few words are about itself.. Mr.Qwerty Свободное общение 3 16.07.2009 20:31