Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.11.2015, 09:18
amspeople amspeople вне форума
Прохожий
 
Регистрация: 05.11.2015
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
Вопрос Перевести код из C++

Есть код:
Код:
char szObjectName[] = "Clipboard";
int irPlg_GetPluginName(char* szBuffer, int* pnBufferSize)
{
	// The proper name of the object as it will appear on the Plugins menu
	int nLength = lstrlen(szObjectName);
	if(*pnBufferSize < nLength)
	{
		*pnBufferSize = nLength;
		return -1;
	} else
	{
		memset(szBuffer,0,*pnBufferSize);
		lstrcpy(szBuffer,szObjectName);
		return nLength;
	}
}
Помогите, плиз, перевести его в Pascal.
Ответить с цитированием
  #2  
Старый 05.11.2015, 19:02
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
const
  szObjectName : String = 'Clipboard';

function irPlg_GetPluginName(szBuffer : PChar; var pnBufferSize : Integer) : Integer;
var
  nLength : Integer;
begin
  nLength := Length(szObjectName) * SizeOf(Char); // To support unicode and non unicode
  if pnBufferSize < nLength
    Then
      Begin
         pnBufferSize := nLength;
         Result := -1;
      End
    Else
      Begin
        FillChar(szBuffer,pnBufferSize,#0);
        StrCopy(szBuffer,PCHAR(szObjectName));
        Result := nLength;
      End;
end;

Как-то так, если не напутал с параметрами FillChar и StrCpy - проверь по документации.

Последний раз редактировалось lmikle, 07.11.2015 в 23:34.
Ответить с цитированием
  #3  
Старый 05.11.2015, 23:26
amspeople amspeople вне форума
Прохожий
 
Регистрация: 05.11.2015
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

А то, что в параметрах функции вы используете не указатели, как в функции на C++, ничего страшного?
Эта функция будет экспортироваться в DLL. И, вроде как, программа, вызывающая эту функцию будет передавать в параметрах указатель на буфер.

Последний раз редактировалось amspeople, 06.11.2015 в 10:30.
Ответить с цитированием
  #4  
Старый 06.11.2015, 10:17
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Если для DLL, то для полной совместимости надо заменить String на AnsiString.
Код:
const
  szObjectName : AnsiString = 'Clipboard';
 
function irPlg_GetPluginName(szBuffer : PAnsiChar; var pnBufferSize : Integer) : Integer;
var
  nLength : Integer;
begin
  nLength := Length(szObjectName) * SizeOf(AnsiChar); // To support unicode and non unicode
  if pnBufferSize < nLength
    Then
      Begin
         pnBufferSize := nLength;
         Result := -1;
      End
    Else
      Begin
        FillChar(szBuffer,nLength,#0);
        StrCpy(szBuffer,PAnsiChar(szObjectName),nLength);
        Result := nLength;
      End;
end;
Ответить с цитированием
  #5  
Старый 06.11.2015, 19:00
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Вася, умный, да?
Читай код внимательно.
1. String используется только внутри модуля, наружу выдается PChar.
2. String использован именно для универсальности - поддерживается unicode и non-unicode версии.
3. Везде наружу "торчат" именно указатели:
PChar - указатель на Char;
var Integer в параметрах функции компилятором транслируется именно в указатель.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
amspeople (07.11.2015)
  #6  
Старый 07.11.2015, 09:26
amspeople amspeople вне форума
Прохожий
 
Регистрация: 05.11.2015
Сообщения: 6
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

lmikle, спасибо за код и разъяснения.
Один момент, Делфи 7 не знает функцию StrCpy. Может подключить в uses что надо? Спасибо.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:31.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025