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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2012, 23:26   #1
winhttp
Пользователь
 
Регистрация: 29.07.2012
Сообщений: 98
По умолчанию где ошибка? создание dll

Код:
library Project1;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  SysUtils,
  Classes;

{$R *.res}
function too(): Boolean;  stdcall;
var
{Pyt: array[1..8] of String;    }
IntLen: Integer;
StrBuffer: String;
S: String;
  begin
   SetLength(StrBuffer,1000);
   IntLen:=GetWindowsDirectory(PChar(StrBuffer),1000);
   WinDir:=Trim(Copy(StrBuffer,1,IntLen));
   S:=WinDir;
   Delete(S,4,Length(S)-3);

  end;

exports too;



end.
winhttp вне форума Ответить с цитированием
Старый 10.08.2012, 23:49   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

Функция не возвращает результат.
Человек_Борща вне форума Ответить с цитированием
Старый 10.08.2012, 23:49   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что этот код должен делать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2012, 00:14   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

код обязан возвращать строку. Хотя код бессмысленный и беспощадный.
Человек_Борща вне форума Ответить с цитированием
Старый 11.08.2012, 00:28   #5
winhttp
Пользователь
 
Регистрация: 29.07.2012
Сообщений: 98
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
код обязан возвращать строку. Хотя код бессмысленный и беспощадный.
разве строку, а не Boolean ?
winhttp вне форума Ответить с цитированием
Старый 11.08.2012, 00:31   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,726
По умолчанию

Код:
function too(): Boolean;  stdcall;
Цитата:
код обязан возвращать строку.
Булеан стал строкой?
p51x вне форума Ответить с цитированием
Старый 11.08.2012, 00:32   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

Код вообще жутко идиотский. Функция вытаскивает букву диска+некоторый хлам с конца строки, где живет ОС, тобежь из c:\Windows становится c:\Wows

Результат достигнут и он не BOOL. Что глупее будет, получили ли мы нужное или нет? Может проще вернуть, то что получилось?

Последний раз редактировалось Человек_Борща; 11.08.2012 в 00:35.
Человек_Борща вне форума Ответить с цитированием
Старый 11.08.2012, 13:17   #8
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Автор, если ты хочешь узнать путь к папке windows, то предлагаю теб такой вариант:
Код:
function too: string; 
var 
p : PChar; 
begin 
GetMem(p, MAX_PATH); 
result := ''; 
if GetWindowsDirectory(p, MAX_PATH) > 0 then 
result := string(p); 
FreeMem(p); 
end;
Kix.IV вне форума Ответить с цитированием
Старый 11.08.2012, 13:37   #9
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

И при возврате string надо не забывать про ShareMem, как написано в комментарии.
Somebody вне форума Ответить с цитированием
Старый 11.08.2012, 14:45   #10
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Тогда лучше сделать так:
Код:
function too: widestring;
var
p : PChar;
begin
GetMem(p, MAX_PATH);
result := ''; 
if GetWindowsDirectory(p, MAX_PATH) > 0 then
result := string(p);
FreeMem(p);
end;
Kix.IV вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
написал программу, где то ошибка, не пойму где... Kelevra91 Общие вопросы C/C++ 5 17.01.2011 16:38
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36
Создание Image подскажите где ошибка МаксMorfey Общие вопросы по Java, Java SE, Kotlin 2 11.10.2009 22:22
Где взять dll? Lady_olga БД в Delphi 4 11.06.2008 00:17