![]() |
|
|
Регистрация | << Правила форума >> | 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 что надо? Спасибо. |