![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Есть код:
Код:
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;
}
} |
|
#2
|
|||
|
|||
|
Код:
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
|
|||
|
|||
|
А то, что в параметрах функции вы используете не указатели, как в функции на C++, ничего страшного?
Эта функция будет экспортироваться в DLL. И, вроде как, программа, вызывающая эту функцию будет передавать в параметрах указатель на буфер. Последний раз редактировалось amspeople, 06.11.2015 в 10:30. |
|
#4
|
|||
|
|||
|
Если для 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
|
|||
|
|||
|
Вася, умный, да?
Читай код внимательно. 1. String используется только внутри модуля, наружу выдается PChar. 2. String использован именно для универсальности - поддерживается unicode и non-unicode версии. 3. Везде наружу "торчат" именно указатели: PChar - указатель на Char; var Integer в параметрах функции компилятором транслируется именно в указатель. |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
amspeople (07.11.2015)
| ||
|
#6
|
|||
|
|||
|
lmikle, спасибо за код и разъяснения.
Один момент, Делфи 7 не знает функцию StrCpy. Может подключить в uses что надо? Спасибо. |