Использование во FreePascal dll для Си

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Re: Использование во FreePascal dll для Си

Сообщение UncleAndy » 19.07.2011 13:50:18

Vadim писал(а):Сишный FILE - это большая и сложная структура, т.е. набор данных, типа RECORD.

А где можно найти описание этой структуры?
UncleAndy
новенький
 
Сообщения: 14
Зарегистрирован: 12.07.2011 19:00:24

Re: Использование во FreePascal dll для Си

Сообщение Maxizar » 19.07.2011 14:08:08

Давайте разберемся с указателями в Си:
1. Запись (объявление)
Код: Выделить всё
int* a;
int *b;


Так вот а - указатель на инт, и b тоже указатель на инт. Просто это две возможных записи справа от типа либо слева от переменной. ну справа\слева это я про звездочку *

2. Получение адреса и разименование (получение значения)
Код: Выделить всё
int a;
int *ptra;

a = 7;
ptra = &a; //получили адрес переменной а, операция & это то что в паскале @
cout << "значение переменной a" << a << endl;
cout << "значение переменной a полученной через указатель" << *ptra << endl;

В последней строке звездочка играет роль разименования указателя... (да да у авторов языка Си не хватило значков)...

Тоже самое на паскале:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
  a   :  Integer;
  ptra: ^Integer;
begin
  a   :=7;
  ptra:=@a;

  Caption:='a= '+IntToStr(a)+' aptr^='+IntToStr(ptra^);
end;

На паскале путаницы нету.. Гринпис или рьяных защитников Си, просьба обратить внимание, что у нас (в Паскале) значок ^ для обозначения указателя стоит слева от имени типа, тогда как при разименовании справа от переменной...

Тогда что касается *FILE не совсем понятно.. все дружно решили что это указатель... вообщето это переменная указывающая на ... непонятно на что?? где полный исходник, привели хотябы полную функцию.

А вот как быть с FILE если это не указатель?

Вот опять, где полная запись (функция) где вообще гарантия того, что FILE - это тип? судя по вопросу, вы такую гарантию дать не можете.

Возможно ваш модуль, это модуль для работы с ядром, тогда там есть это:
struct file
Которая используется для работы с файлом (скажем когда модуль - драйвер регестрирует символьное устройство)...

но в Си имеет значение регистр, тогда не понятно что такое FILE и тип ли это вообще?. Даешь полную информацию... :evil:
Ну если это реально тот самый тип FILE, то почему записано так *FILE непонятно....
Код: Выделить всё
int main()
{

      FILE *file;

      if ((file = fopen("1.txt","w")) == NULL)
         printf("Файл невозможно открыть или создать\n");
      else{
         //Работаем с файлом
            }
      fclose(file);
return 0;
}
Последний раз редактировалось Maxizar 19.07.2011 14:20:53, всего редактировалось 1 раз.
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: Использование во FreePascal dll для Си

Сообщение Vadim » 19.07.2011 14:16:58

Maxizar писал(а):Тогда что касается *FILE не совсем понятно.. все дружно решили что это указатель... вообщето это переменная указывающая на ... непонятно на что??


Раз есть звёздочка, значит это, совершенно определённо, указатель. ;)
И почему "непонятно на что"? FILE - это структура и никто никогда этого не скрывал. Так что Ваши непонятки не совсем понятны. :D

Добавлено спустя 2 минуты 32 секунды:
UncleAndy писал(а):А где можно найти описание этой структуры?

В файле libio.h.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Использование во FreePascal dll для Си

Сообщение UncleAndy » 19.07.2011 14:39:22

Извиняюсь что не привел пример функции. Я делаю юниты для использования библиотеки gpgme (использование GPG) для Free Pascal. Вот с этой функцией у меня и возникли проблемы:

Код: Выделить всё
gpgme_error_t gpgme_data_new_from_filepart (gpgme_data_t *dh, const char *filename, FILE *fp, off_t offset, size_t length)
UncleAndy
новенький
 
Сообщения: 14
Зарегистрирован: 12.07.2011 19:00:24

Re: Использование во FreePascal dll для Си

Сообщение UncleAndy » 22.07.2011 21:25:41

Brainenjii писал(а):есть модуль unixtype - тип size_t там точно присутствует

Как я и предполагал, на этом модуле lazarus остановился при компиляции под Windows. Что можно сделать для обеспечения переносимости?
UncleAndy
новенький
 
Сообщения: 14
Зарегистрирован: 12.07.2011 19:00:24

Пред.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru