Вставка кода С++ в Lazarus. Возможно ли?

Вопросы программирования и использования среды Lazarus.

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

Вставка кода С++ в Lazarus. Возможно ли?

Сообщение Eger » 28.11.2012 22:57:00

Возможно ли в Lazarus проекте использовать вставленные процедуры написанные на С++?
Если ДА, то как? Где почитать? Примеры?

В частности: Я хочу использовать в своем проекте некоторый функционал этой программы:
Info: http://www.winsim.com/diskid32/diskid32.html
Source: http://www.winsim.com/diskid32/diskid32.cpp
Exe: http://www.winsim.com/diskid32/diskid32.exe

Программа собирает информацию про HDD (и не только) не требуя при этом админских полномочий на Vista/Seven

Конечно, можно вызывать внешний EXE-шник и получать его результаты, или всё это добро засунуть в DLL.
Но при этом проект обзаведется лишними файлами. А я хочу иметь всё в одном EXE-шнике.

Возможно, есть еще какие-то варианты решения вопроса?
Eger
незнакомец
 
Сообщения: 5
Зарегистрирован: 19.11.2012 15:46:06

Re: Вставка кода С++ в Lazarus. Возможно ли?

Сообщение Сквозняк » 29.11.2012 04:52:53

Если нет проблем с лицензиями, то попробуй прилинковать статически содержимое внешней DLL.
Сквозняк
энтузиаст
 
Сообщения: 1129
Зарегистрирован: 29.06.2006 22:08:32

Re: Вставка кода С++ в Lazarus. Возможно ли?

Сообщение Vadim » 29.11.2012 09:47:02

Если не хотите DLL, то придётся переписывать функции под синтаксис паскаля.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Вставка кода С++ в Lazarus. Возможно ли?

Сообщение Eger » 29.11.2012 14:44:55

Обнаружил порт указанного исходника на Pascal

Info: http://derevyanko.blogspot.com/2009/02/hardware-id-diskid32-delphi.html
Source: http://code.google.com/p/dvsrc/downloads/detail?name=20120116DiskId32Port_fixed.7z&can=2&q=

Автор
перевел проект на Delphi 2010 (совместимость с Delphi 7 сохранена)

Но в Lazarus сиё чудо не компилится

Код: Выделить всё
...
type tdiskdata_dv = array [0..256-1] of DWORD;   
type
  tarray_of_words256_dv = array [0..256-1] of WORD;
  parray_of_words256_dv = ^tarray_of_words256_dv; 
  ...

function ReadPhysicalDriveInNTWithAdminRights(var Dest: tresults_array_dv): Boolean;
var
  ...
  diskdata: tdiskdata_dv;
  ijk: Integer;
  pIdSector: PWord;       
begin 
  ...
  for ijk := 0 to 256-1 do begin
-->>    diskdata [ijk] := parray_of_words256_dv(pIdSector)[ijk]; //Error: Incompatible types: got "tarray_of_words256_dv" expected "LongWord"
  end;
  ...
end;

Ошибка появляется в строках 377, 560, 1269.

Протестить исходник на D-2010 или D-7 не имею возможности.
Отличиями и тонкостями Delphi/Lazarus не владею.
Кто может подсказать как исправить ошибку?
Eger
незнакомец
 
Сообщения: 5
Зарегистрирован: 19.11.2012 15:46:06

Re: Вставка кода С++ в Lazarus. Возможно ли?

Сообщение Mr.Smart » 29.11.2012 15:07:10

Где текст ошибок? Телепатов нет!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Вставка кода С++ в Lazarus. Возможно ли?

Сообщение Eger » 29.11.2012 15:11:54

Mr.Smart писал(а):Где текст ошибок? Телепатов нет!

Телепать не нужно
Всё есть в приведенном исходнике.

Строка выделена стрелкой:
"-->>"

Ошибка в виде комментария - Жирным:
diskdata [ijk] := parray_of_words256_dv(pIdSector)[ijk]; //Error: Incompatible types: got "tarray_of_words256_dv" expected "LongWord"

Только тег "B" в теге "Code" не работает...

Добавлено спустя 1 час 44 минуты 40 секунд:
Методом "научного втыка" выявил причину - символ "^"

Я убрал этот символ и все компильнулось и заработало.
Изменилась 1 строка:
parray_of_words256_dv = ^tarray_of_words256_dv;
на
parray_of_words256_dv = tarray_of_words256_dv;

Вопрос к знающим: А что этот символ значит и какая его роль в Delphi?
И не обрезал ли я этим символом часть функционала?
Eger
незнакомец
 
Сообщения: 5
Зарегистрирован: 19.11.2012 15:46:06

Re: Вставка кода С++ в Lazarus. Возможно ли?

Сообщение SergeiD » 29.11.2012 17:11:58

Данный символ обозначает указатель на тип tarray_of_words256_dv. По идее объявление было правильным.
SergeiD
новенький
 
Сообщения: 11
Зарегистрирован: 28.11.2012 11:09:19

Re: Вставка кода С++ в Lazarus. Возможно ли?

Сообщение iskander » 29.11.2012 19:23:09

Eger писал(а):Кто может подсказать как исправить ошибку?

Код: Выделить всё
{MODE DELPHI}

вам в помощь :wink:
iskander
энтузиаст
 
Сообщения: 624
Зарегистрирован: 08.01.2012 18:43:34

Re: Вставка кода С++ в Lazarus. Возможно ли?

Сообщение SergeiD » 30.11.2012 10:11:50

iskander писал(а):
Eger писал(а):Кто может подсказать как исправить ошибку?

Код: Выделить всё
{MODE DELPHI}

вам в помощь :wink:

Точнее:
Код: Выделить всё
{$MODE DELPHI}
SergeiD
новенький
 
Сообщения: 11
Зарегистрирован: 28.11.2012 11:09:19


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru