Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
 Аватар для OmutMoren
17 / 17 / 0
Регистрация: 04.06.2012
Сообщений: 88

Из Delphi в C++

11.07.2012, 21:48. Показов 1560. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, Уважаемые Форумчане!
Необходима помощь в переводе кода из Delphi в C++. Часть кода:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure Fill_ee_s(CL : TCLBR; var ee : Tee);
type
    Tbuf = array[0..ee_long-1] of byte;
var p:pointer;
    i:integer;
    buf:Tbuf;
begin
 ee.size:=ee_long;
 p:=@Cl;
 buf := Tbuf(p^);
 for I := 0 to ee_long - 1 do
   ee.Arr[i]:=buf[i];
end;
Непонятно следующее: как в C++ правильно реализовать Tbuf = array[0..ee_long-1] of byte этот момент.
Далее что значит p:=@Cl ??? - указатель на ячейку в памяти?
И последнее: buf := Tbuf(p^) - что это?!

Если будет не сложно, напишите этот код на С++.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.07.2012, 21:48
Ответы с готовыми решениями:

Какие отличия Delphi 5, Delphi 6 и Delphi 7
Кто-нибудь юзал Delphi 6? Если да, то напишите, плиз, его отличия от 5-ой версии (плюсы и минусы) Кстати, никто не слышал ничего о Delphi...

Что лучше брать Delphi XE2, Delphi XE, Delphi 7?
Привет форумчане! У меня вопрос: что лучше брать Delphi XE2, Delphi XE, Delphi 7? Как вообще различаются серия Delphi XE, и Delphi 7?

ZipForge для Delphi Xe - интерфейс стал выглядеть как в Delphi 2007
Народ!!! Помоготи!!! Установил компонент ZipForge для Delphi Xe и после этого интерфейс моей программы стал таким, как будто я его в delphi...

16
4192 / 1839 / 222
Регистрация: 06.10.2010
Сообщений: 4,125
12.07.2012, 06:27
Вроде бы так.
C++
1
2
3
4
5
6
7
8
typedef unsigned char TBuf[ee_long];
 
void Fill_ee_s(TCLBR CL, Tee *ee)
{
  (*ee).size=ee_long;
  for(int i=0; i<ee_long; i++)
    (*ee).Arr[i]=(*reinterpret_cast<TBuf*>(&CL))[i];
}
Может проще memcpy вызвать?

Добавлено через 3 минуты
C
1
2
3
4
5
6
void Fill_ee_s(unsigned char *CL, Tee *ee)
{
  (*ee).size=ee_long;
  for(int i=0; i<ee_long; i++)
    (*ee).Arr[i]=CL[i];
}
0
 Аватар для OmutMoren
17 / 17 / 0
Регистрация: 04.06.2012
Сообщений: 88
12.07.2012, 12:47  [ТС]
А что значит данная запись:
Delphi
1
buf := Tbuf(p^);
Добавлено через 14 минут
И что делать вот с этим куском:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
procedure Extract_ee_s(var CL : TCLBR; ee : Tee);
type
    Tbuf = array[0..ee_long-1] of byte;
var
    i:integer;
    buf:Tbuf;
    p:pointer;
begin
for i := 0 to ee_long - 1 do
  buf[i]:=ee.arr[i];
p := @buf;
Cl:=TCLBR(p^);
end;
 
 
procedure Replace(var s: String; subs1,subs2: String);
var i : Integer;
begin
  if subs1='' then Exit;
  if subs1=subs2 then Exit;
  i:=Pos(subs1,s);
  while i>0 do begin
    Delete(s,i,Length(subs1));
    Insert(subs2,s,i);
    i:=Pos(subs1,s);
  end;
end;
TCLBR и Tee заданы следующим образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct TCLBR {
    unsigned short Az_bottom, Az_top;     // вместо short может быть int
    unsigned short El_bottom, El_top;
    float K_az, K_el;
    unsigned short Offset_az, Offset_el;
    unsigned short Baud;
    unsigned char  TRX_adr;
};
 
struct Tee {
    unsigned char  Arr[511];
    unsigned short size;
};
0
4192 / 1839 / 222
Регистрация: 06.10.2010
Сообщений: 4,125
12.07.2012, 13:03
А что значит данная запись:
Содержимое памяти по адресу p копируется в массив buf. Это лишняя пересылка данных - нужно было делать по-другому.

Добавлено через 6 минут
Вот так это делается
C++
1
2
3
4
void Extract_ee_s(TCLBR* CL, Tee ee)
{
    memcpy(CL,&ee.Arr,ee_long);
}
Добавлено через 1 минуту
C++
1
2
3
4
void Fill_ee_s(unsigned char *CL, Tee *ee)
{
    memcpy(&(*ee).Arr,CL,ee_long);
}
Добавлено через 3 минуты
Функция Replace находит все вхождения подстроки subs1 в строке s и заменяет их подстрокой subs2.

Добавлено через 3 минуты
В функции Fill_ee_s пропустил строчку
C++
1
(*ee).size=ee_long;
1
 Аватар для OmutMoren
17 / 17 / 0
Регистрация: 04.06.2012
Сообщений: 88
12.07.2012, 14:52  [ТС]
А какие у данных функций аналоги в С++?
Delphi
1
2
3
Delete(s,i,Length(subs1));
    Insert(subs2,s,i);
    i:=Pos(subs1,s);
0
4192 / 1839 / 222
Регистрация: 06.10.2010
Сообщений: 4,125
12.07.2012, 15:08
Я описал как работает функция Replace. Реализуй как тебе удобнее. Тип string вероятно придётся заменить на char *.
0
 Аватар для OmutMoren
17 / 17 / 0
Регистрация: 04.06.2012
Сообщений: 88
12.07.2012, 15:20  [ТС]
Так, с этим вроде разобрался:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Replace(AnsiString& s, AnsiString subs1, AnsiString subs2)
{
    int i;
    if (subs1 == "") {
        return;
    }
    if (subs1 == subs2) {
        return;
    }
        i = s.Pos(subs1);
    while (i > 0)
        {
            s.Delete(i,subs1.Length());
            s.Insert(subs2,i);
            i = s.Pos(subs1);
        }
}
Проверьте, правильно ли.

Вот ещё какой вопрос: А что значит procedure Replace(var s: String; subs1,subs2: String) ??? Эта переменная приходит в процедуру или наоборот, выходит?

Так же есть следующий вопрос. Если procedure я заменял void'ом, то как поступить вот с этим:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
function FieldToReal(s: String):Real;
var c : Integer;
begin
  val(s,result,c);
  if c>0 then result:=0;
end;
 
function GetField(source,field: String):String;
var p1,p2  : Integer;
    quotes : Boolean;
    s2     : String;
 
  function FindField(source,field: String):Integer;
  var i      : Integer;
      quotes : Boolean;
  begin
    quotes:=False;
    for i:=1 to Length(source) do begin
      if source[i]='"' then begin
        quotes:=not quotes;
        Continue;
      end;
 
      if quotes then source[i]:='-';
    end;
    result:=pos(field,source);
  end;
 
begin
  source:=' '+source;
  field:=UpperCase(field);
  field:=' '+field;
  p1:=FindField(source,field);
  if p1=0 then begin
    result:='';
    Exit;
  end;
 
  s2:='';
  p2:=p1+Length(field);
  quotes:=False;
  while p2<=Length(source) do begin
    if source[p2]='"' then begin
      quotes:=not quotes;
      Inc(p2);
      Continue;
    end;
 
    if (source[p2]=' ') and not quotes then Break;
 
    s2:=s2+source[p2];
    Inc(p2);
  end;
  result:=s2;
end;
На что изменять function? Смотреть по содержимому?

В строчке 12 у функции GetField нет end, но внутри присутствует другая функция FindField. Как это вообще так??? Как это сделать в С++?
0
4192 / 1839 / 222
Регистрация: 06.10.2010
Сообщений: 4,125
12.07.2012, 17:55
А что значит procedure Replace(var s: String; subs1,subs2: String) ???
Это значит, что будет передаваться указатель на String. Можно конечно написать pstring, но var обеспечивает строгую проверку типов.

FieldToReal просто конвертирует строку в float. Используй вместо неё какую-нибудь стандартную сишную функцию.

Как это вообще так???
Локальная функция - она видна только внутри GetField. В си кажется это делается при помощи пространств имён.

Добавлено через 1 минуту
Она вызывается там всего 1 раз - разверни её.

Добавлено через 5 минут
Это
Delphi
1
function GetField(source,field: String):String;
будет так
C++
1
AnsiString GetField(AnsiString source, AnsiString field)
1
 Аватар для OmutMoren
17 / 17 / 0
Регистрация: 04.06.2012
Сообщений: 88
12.07.2012, 22:26  [ТС]
А как будет выглядеть следующее:
Delphi
1
 ADMUX_init := (1 shl REFS0) or (1 shl REFS1);
Добавлено через 1 час 59 минут
И как вот это выглядит в С++:
Delphi
1
2
3
4
5
6
7
8
9
10
try
      n_az:=StrToFloat(edit10.Text);
      n_el:=StrToFloat(edit11.Text);
    except
     on EConvertError do
       begin
         Showmessage('Please enter correct angle');
         exit;
       end;
    end;
Что есть 4 и 5 строки, как их понимать и реализовать в С?
0
4192 / 1839 / 222
Регистрация: 06.10.2010
Сообщений: 4,125
13.07.2012, 05:59
1.
C++
1
ADMUX_init = (1 << REFS0) | (1 << REFS1);
2. В переменные n_az и n_el записываются числа из edit`ов. Если произошла ошибка при конвертировании строки в число, то выводится MessageBox.
1
 Аватар для OmutMoren
17 / 17 / 0
Регистрация: 04.06.2012
Сообщений: 88
15.07.2012, 15:46  [ТС]
Вот какой вопрос возник: у меня есть только dll, написанная в Delphi. Есть список всех вызываемых из ней функций. Вот так выглядит pas-файл вызова библиотеки в Delphi:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
unit DLL_usb;
 
interface
const
 
 
  NO_ERROR=0;
  DEVICE_NOT_PRESENT=1;
  NO_DATA_AVAILABLE=2;
  INVALID_BAUDRATE=3;
  OVERRUN_ERROR=4;
  INVALID_DATABITS=5;
  INVALID_PARITY=6;
  INVALID_STOPBITS=7;
 
DLLPath='rotator.dll';
 
function DoGetInfraCode(var TimeCodeDiagram:array of byte; var DiagramLength:integer):integer;  stdcall external DLLPath name 'DoGetInfraCode';
function DoSetDataPortDirection(DirectionByte:byte):integer;  stdcall external DLLPath name 'DoSetDataPortDirection';
function DoGetDataPortDirection(var DataDirectionByte:byte):integer;  stdcall external DLLPath name 'DoGetDataPortDirection';
function DoSetOutDataPort(DataOutByte:byte):integer;  stdcall external DLLPath name 'DoSetOutDataPort';
function DoGetOutDataPort(var DataOutByte:byte):integer;  stdcall external DLLPath name 'DoGetOutDataPort';
function DoGetInDataPort(var DataInByte:byte):integer;  stdcall external DLLPath name 'DoGetInDataPort';
function DoEEPROMRead(Address:word; var DataInByte:byte):integer;  stdcall external DLLPath name 'DoEEPROMRead';
function DoEEPROMWrite(Address:word; DataOutByte:byte):integer;  stdcall external DLLPath name 'DoEEPROMWrite';
function DoRS232Send(DataOutByte:byte):integer;  stdcall external DLLPath name 'DoRS232Send';
function DoRS232Read(var DataInByte:byte):integer;  stdcall external DLLPath name 'DoRS232Read';
function DoSetRS232Baud(BaudRate:integer):integer;  stdcall external DLLPath name 'DoSetRS232Baud';
function DoGetRS232Baud(var BaudRate:integer):integer;  stdcall external DLLPath name 'DoGetRS232Baud';
function DoGetRS232Buffer(var RS232Buffer:array of byte; var RS232BufferLength:integer):integer;  stdcall external DLLPath name 'DoGetRS232Buffer';
function DoRS232BufferSend(var RS232Buffer:array of byte; var RS232BufferLength:integer):integer;  stdcall external DLLPath name 'DoRS232BufferSend';
 
function DoSetRS232DataBits(DataBits:byte):integer;  stdcall external DLLPath name 'DoSetRS232DataBits';
function DoGetRS232DataBits(var DataBits:byte):integer;  stdcall external DLLPath name 'DoGetRS232DataBits';
function DoSetRS232Parity(Parity:byte):integer;  stdcall external DLLPath name 'DoSetRS232Parity';
function DoGetRS232Parity(var Parity:byte):integer;  stdcall external DLLPath name 'DoGetRS232Parity';
function DoSetRS232StopBits(StopBits:byte):integer;  stdcall external DLLPath name 'DoSetRS232StopBits';
function DoGetRS232StopBits(var StopBits:byte):integer;  stdcall external DLLPath name 'DoGetRS232StopBits';
 
function DoSetDataPortDirections(DirectionByteB, DirectionByteC, DirectionByteD:byte; UsedPorts:byte):integer;  stdcall external DLLPath name 'DoSetDataPortDirections';
function DoGetDataPortDirections(var DataDirectionByteB, DataDirectionByteC, DataDirectionByteD:byte; var UsedPorts:byte):integer;  stdcall external DLLPath name 'DoGetDataPortDirections';
function DoSetOutDataPorts(DataOutByteB, DataOutByteC, DataOutByteD:byte; UsedPorts:byte):integer;  stdcall external DLLPath name 'DoSetOutDataPorts';
function DoGetOutDataPorts(var DataOutByteB, DataOutByteC, DataOutByteD:byte; var UsedPorts:byte):integer;  stdcall external DLLPath name 'DoGetOutDataPorts';
function DoGetInDataPorts(var DataInByteB, DataInByteC, DataInByteD:byte; var UsedPorts:byte):integer;  stdcall external DLLPath name 'DoGetInDataPorts';
 
function DoADCRead(Chanel:byte; var Data:word):integer;  stdcall external DLLPath name 'DoADCRead';
function DoADCSetStatus(ADMUX, ADCSRA : byte):integer;   stdcall external DLLPath name 'DoADCSetStatus';
function DoADCGetStatus(var ADMUX, ADCSRA : byte):integer;   stdcall external DLLPath name 'DoADCGetStatus';
 
 
 
implementation
 
end.
Я сделал вот так:
Файл DLL_usb.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//---------------------------------------------------------------------------
 
 
#pragma hdrstop
 
#define NO_ERROR              0;
#define DEVICE_NOT_PRESENT    1;
#define NO_DATA_AVAILABLE     2;
#define INVALID_BAUDRATE      3;
#define OVERRUN_ERROR         4;
#define INVALID_DATABITS      5;
#define INVALID_PARITY        6;
#define INVALID_STOPBITS      7;
 
#include "DLL_usb.h"
 
//---------------------------------------------------------------------------
 
#pragma package(smart_init)
Файл DLL_usb.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//---------------------------------------------------------------------------
 
#ifndef DLL_usbH
#define DLL_usbH
 
#ifdef __cplusplus
extern "C" {
#endif
 
#define rotator.dll    "rotator.dll";
  //return values from AVR309DLL functions:
 
 
int __stdcall DoGetInfraCode(unsigned char * TimeCodeDiagram, int * DiagramLength);
int __stdcall DoSetDataPortDirection(unsigned char DirectionByte);
int __stdcall DoGetDataPortDirection(unsigned char * DataDirectionByte);
int __stdcall DoSetOutDataPort(unsigned char DataOutByte);
int __stdcall DoGetOutDataPort(unsigned char * DataOutByte);
int __stdcall DoGetInDataPort(unsigned char * DataInByte);
 
int __stdcall DoSetDataPortDirections(unsigned char DirectionByteB, unsigned char DirectionByteC, unsigned char DirectionByteD, unsigned char UsedPorts);
int __stdcall DoGetDataPortDirections(unsigned char * DataDirectionByteB, unsigned char * DataDirectionByteC, unsigned char * DataDirectionByteD, unsigned char * UsedPorts);
int __stdcall DoSetOutDataPorts(unsigned char DataOutByteB, unsigned char DataOutByteC, unsigned char DataOutByteD, unsigned char UsedPorts);
int __stdcall DoGetOutDataPorts(unsigned char * DataOutByteB, unsigned char * DataOutByteC, unsigned char * DataOutByteD, unsigned char * UsedPorts);
int __stdcall DoGetInDataPorts(unsigned char * DataInByteB, unsigned char * DataInByteC, unsigned char * DataInByteD, unsigned char * UsedPorts);
 
int __stdcall DoEEPROMRead(unsigned short Address, unsigned char * DataInByte);
int __stdcall DoEEPROMWrite(unsigned short Address, unsigned char * DataOutByte);
int __stdcall DoRS232Send(unsigned char DataOutByte);
int __stdcall DoRS232Read(unsigned char * DataInByte);
int __stdcall DoSetRS232Baud(int BaudRate);
int __stdcall DoGetRS232Baud(int * BaudRate);
int __stdcall DoGetRS232Buffer(unsigned char * RS232Buffer, int * RS232BufferLength);
int __stdcall DoRS232BufferSend(unsigned char * RS232Buffer, int *  RS232BufferLength);
int __stdcall DoSetRS232DataBits(unsigned char DataBits);
int __stdcall DoGetRS232DataBits(unsigned char * DataBits);
int __stdcall DoSetRS232Parity(unsigned char Parity);
int __stdcall DoGetRS232Parity(unsigned char * Parity);
int __stdcall DoSetRS232StopBits(unsigned char StopBits);
int __stdcall DoGetRS232StopBits(unsigned char * StopBits);
 
int __stdcall DoADCRead(unsigned char Chanel, unsigned short Data);
int __stdcall DoADCSetStatus(unsigned char ADMUX, unsigned char ADCSRA);
int __stdcall DoADCGetStatus(unsigned char * ADMUX, unsigned char * ADCSRA);
 
 
#ifdef __cplusplus
    }
#endif
//---------------------------------------------------------------------------
#endif
И при вызове какой-либо функции вылетает ошибка. Я так понял что что-то я не так делаю при открытии dll-файла и опубликовании функций. Ошибка вот какая:
[ILINK32 Error] Error: Unresolved external 'DoGetRS232Parity' referenced from D:\DROPBOX\KOLOSOV\ТЕСТИРОВАНИЕ YAESU G-5500\ТЕСТОВАЯ НОВАЯ\DEBUG\WIN32\MAIN.OBJ
[ILINK32 Error] Error: Unable to perform link

Заранее благодарен!
0
4192 / 1839 / 222
Регистрация: 06.10.2010
Сообщений: 4,125
15.07.2012, 19:17
Тебе надо сделать lib-файл для этой dll и подключить к C. Попробуй Dll2lib. Если не получится - тогда загружай через GetProcAddress.

Добавлено через 4 минуты
http://www.rsdn.ru/article/baseserv/dlluse.xml
0
 Аватар для OmutMoren
17 / 17 / 0
Регистрация: 04.06.2012
Сообщений: 88
15.07.2012, 19:46  [ТС]
А вот поподробнее с примером можно??? Хотя бы на примере одной функции, извлекаемой из dll. Как из dll делать lib я уже знаю.
По ссылочке - там везде необходим h файл, которого у меня нету.
0
4192 / 1839 / 222
Регистрация: 06.10.2010
Сообщений: 4,125
15.07.2012, 20:08
h файл переписываешь с delphi. Ты правильно начал. Только вот при передаче открытых массивов добавляется скрытый параметр - длина массива в элементах минус один (это я узнал из дизасма). То есть если в массиве 5 элементов - этот параметр будет равен 4.

Вот например эта функция
Delphi
1
function DoGetInfraCode(var TimeCodeDiagram:array of byte; var DiagramLength:integer):integer;
Будет выглядеть так
C++
1
int __stdcall DoGetInfraCode(unsigned char * TimeCodeDiagram, int length, int * DiagramLength);
Добавлено через 6 минут
Перепутал порядок - длина массива после указателя. Поправил.
0
4192 / 1839 / 222
Регистрация: 06.10.2010
Сообщений: 4,125
16.07.2012, 06:54
Допустим есть библиотека на Delphi
код
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
library DLL;
 
uses
  Windows;
 
procedure MyProc(var text: array of AnsiChar);stdcall;
var
 s: array[0..15] of AnsiChar;
begin
  str(length(text),s);
  MessageBoxA(0,text,s,0);
end;
 
exports MyProc;
 
begin
end.


Первым делом надо создать lib-файл. Пишем def-файл следущего содержания
Code
1
2
3
LIBRARY DLL
EXPORTS
_MyProc@8
Как видно перед именем функции добавляется символ "_", а после - "@" и размер параметров в байтах. Этот def компилируем при помощи polib.exe из MASM32
Code
1
polib.exe /DEF:DLL.def /OUT:DLL.lib /MACHINE:x86
Теперь объявляем функцию в C.
C
1
void __stdcall MyProc(char *str, int len);
или в C++
C++
1
extern "C" void __stdcall MyProc(char *str, int len);
Осталось только подключить lib. В MSVC есть 2 способа:
1) Заходим на вкладку "Проект->Свойства->Свойства конфигурации->Компоновщик->Ввод" и добавляем в поле "Дополнительные зависимости" наш lib-файл.
2) Добавляем в код такую строку
C
1
#pragma comment(lib, "имя lib-файла")
Вот, что получилось
C
1
2
3
4
5
6
7
8
9
10
#pragma comment(lib, "DLL.lib")
void __stdcall MyProc(char *str, int len);
int main()
{
    //Я специально передаю неправильную длину массива, чтобы показать
    //Что функция length в Delphi берёт длину из этого параметра,
    //а не вычисляет её. Кроме того в MessageBox выйдет значение на 1 больше.
    MyProc("Hello World!",789);
    return 0;
}
Вложения
Тип файла: rar 1.rar (48.6 Кб, 9 просмотров)
0
 Аватар для OmutMoren
17 / 17 / 0
Регистрация: 04.06.2012
Сообщений: 88
16.07.2012, 12:12  [ТС]
К сожалению, не работает. Вот ошибка:
[ILINK32 Error] Error: 'D:\DROPBOX\KOLOSOV\ТЕСТИРОВАНИЕ YAESU G-5500\ТЕСТ ОТКРЫТИЯ DLL\DEBUG\WIN32\DLL.LIB' contains invalid OMF record, type 0x21 (possibly COFF)
0
4192 / 1839 / 222
Регистрация: 06.10.2010
Сообщений: 4,125
16.07.2012, 12:44
Попробуй через coffimplib сконвертировать.
Code
1
coffimplib.exe DLL.lib DLL.lib -f
Добавлено через 2 минуты
Использование кода Delphi в C++Builder
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.07.2012, 12:44
Помогаю со студенческими работами здесь

Переписать часть кода с Delphi на ассемблер (ассемблерные вставки в Delphi)
Добрый вечер. Нужно сделать ассемблерные вставки в программе. Первый раз столкнулся с таким заданием, в языке ассемблера почти ноль....

Какова разница работы одного кода в Delphi 7 и в Delphi XE5?
Почему приложение состоящие из одинакового кода, но компилируемое в разных средах работает по разному? Есть клиент-серверное приложение,...

Почему функция работающая в Delphi 7 не работает в Delphi 2007 и в 2009 ??
Данный код работал нормально в D7: procedure TForm1.Button1Click(Sender: TObject); begin ShowWindow(Application.Handle, 0); end;...

где найти delphi c компилятором? и с чего начинать программирование в delphi?
здравствуйте, вот начинаю изучать delphi с чего начинать лучше?

SQL-запрос в Delphi и в Access один и тот же, но в Delphi не работает
ри обращение к базе в Access я использую код: with ADOQueryMain do begin Active:=false; SQL.Clear; SQL.Add('SELECT Code,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru