powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перевести Delphi-процедуру на С++
17 сообщений из 17, страница 1 из 1
Перевести Delphi-процедуру на С++
    #33676457
dilomakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые господа. Я в С++ совсем новенький, поэтому не корите строго за мой элементарный вопрос. Просто в Инете ничего похожего не нашел. Суть. Имеется dll'ка, из которой необходимо вызвать функцию. Dll'ку я подключил через LoadLibrary. Теперь борюсь с вызовом этой функции. На Delphi она выглядит просто:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 procedure  TForm1.Button1Click(Sender: TObject);
 var 
    Buf:  array [byte]  of  char;
    nLen: LongInt; 
 begin 
  nLen := sizeof(Buf)
   if  GetFIOPadegAS('Иванов',
                  'Иван',
                  'Иванович',
                   3 ,
                  @Buf,
                  nLen) =  0   then 
     begin 
      Label1.Caption := Buf;
     end ;
 end ;
Вопрос: А как записать это на С++ (особенно интересует С++ аналог Delphi-оператора @)?
Заранее благодарен за любую помощь.
...
Рейтинг: 0 / 0
Перевести Delphi-процедуру на С++
    #33676502
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажи как объявлятся GetFIOPadegAS
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Перевести Delphi-процедуру на С++
    #33676513
dilomakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Библиотека не моя, но в документации автор пишет такие строки:
Код: plaintext
1.
2.
 function  GetFIOPadegAS(pLastName, pFirstName, pMiddleName: PChar; 
                                 nPadeg: LongInt;
                                 pResult: PChar;  var  nLen: LongInt): Integer; stdcall;
...
Рейтинг: 0 / 0
Перевести Delphi-процедуру на С++
    #33676536
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда что-то типа того:
Код: plaintext
1.
if (GetFIOPadegAS("Иванов","Иван","Иванович", 3 ,Buf,nLen) ==  0 )
{ ........}
или
Код: plaintext
1.
if (GetFIOPadegAS("Иванов","Иван","Иванович", 3 ,Buf,&nLen) ==  0 )
{ ........}
я не знаю толком, что значит var в паскале :(
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Перевести Delphi-процедуру на С++
    #33676552
dilomakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
var в Delphi означает, что параметр передается не по значению, а по ссылке.
...
Рейтинг: 0 / 0
Перевести Delphi-процедуру на С++
    #33676570
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dilomakinvar в Delphi означает, что параметр передается не по значению, а по ссылкеЭто я знаю, я не знаю, чему это аналогично в с++: int &value или int *value.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Перевести Delphi-процедуру на С++
    #33676588
dilomakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я делаю следующее:
В заголовочном файле объявляю тип
Код: plaintext
typedef int (__stdcall *GetFIOPadegFSAS)(const char[], short, char[], short&);
А в обработчике пишу следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
HINSTANCE hDll = LoadLibrary("Padeg.dll");
	if (hDll) {
		GetFIOPadegFSAS pGetFIOPadegFSAS;
		pGetFIOPadegFSAS = (GetFIOPadegFSAS) GetProcAddress(hDll, "GetFIOPadegFSAS");
		char cased[ 255 ];
		short bLen = sizeof(cased);
		pGetFIOPadegFSAS("Петров Александр Федорович",  4 , cased, &bLen);
		FreeLibrary(hDll);
		MessageBox(cased, "Результат", MB_ICONINFORMATION);
	} else {
		MessageBox("DLL не загружена", "Ошибка", MB_ICONERROR);
}
Используемая мной функция несколько отличается параметрами от предыдущей, но это не меняет суть вопроса. Данная функция результат своей работы должна положить в переменную cased, длиной в bLen. А она не кладет...:-(((
...
Рейтинг: 0 / 0
Перевести Delphi-процедуру на С++
    #33676599
dilomakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну если по ссылке, то, видимо, в функцию передается указатель. Следовательно, &????
...
Рейтинг: 0 / 0
Перевести Delphi-процедуру на С++
    #33676622
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dilomakinЕсли ты объявляешь как (const char[], short, char[], short&) то вызывать надо ("Петров Александр Федорович", 4, cased, bLen);
Если ты вызываешь ("Петров Александр Федорович", 4, cased, &bLen); то объявление должно быть (const char[], short, char[], short*)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Перевести Delphi-процедуру на С++
    #33676641
dilomakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас БарабасЕсли ты объявляешь как (const char[], short, char[], short&) то вызывать надо ("Петров Александр Федорович", 4, cased, bLen);

Собсссно...
А в cased после работы функции - мусор. На delphi либа работает как надо...
...
Рейтинг: 0 / 0
Перевести Delphi-процедуру на С++
    #33676647
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dilomakinА в cased после работы функции - мусор. На delphi либа работает как надо...Что-то подсказывает мне, что объявлять надо как short *hLen, соответственно в вызове будет &nLen
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Перевести Delphi-процедуру на С++
    #33676662
dilomakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас БарабасЧто-то подсказывает мне, что объявлять надо как short *hLen, соответственно в вызове будет &nLen
Не-а. В cased по-прежнему мусор.
...
Рейтинг: 0 / 0
Перевести Delphi-процедуру на С++
    #33676676
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dilomakinНе-а. В cased по-прежнему мусор.Ты сначала про одну функцию говорил, теперь я так понимаю, про другую. Покажи ее паскалевкое объявление и как ты ее объявляешь и вызываешь в сишном коде
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Перевести Delphi-процедуру на С++
    #33676695
dilomakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Функции отличаются только тем, что вместо 3-параметров (фамилия, имя, отчество) используется 1 (фио одной строкой). Все остальное без изменений.
Код: plaintext
1.
 function  GetFIOPadegFSAS(pFIO: PChar; nPadeg: LongInt; pResult: PChar;
                          var  nLen: LongInt):Integer; stdcall;
...
Рейтинг: 0 / 0
Перевести Delphi-процедуру на С++
    #33676743
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dilomakinvar nLen: LongIntа ты short вызываешь .... надо int
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Перевести Delphi-процедуру на С++
    #33676771
dilomakin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот, блин.
Прочитал на каком-то форуме. Крупными буквами писали, если в delphi тип longint, то смело пишите short в С++. Не берусь судить о справедливости этого высказывания вообще, но в моем случае это не сработало.
Благодарю, Карабас, за науку.
...
Рейтинг: 0 / 0
Перевести Delphi-процедуру на С++
    #33676873
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dilomakinв delphi тип longint, то смело пишите short в С++Плюнь им в глаз. Посмотри на sizeof этих двух типов данных
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перевести Delphi-процедуру на С++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]