Вставка кода С++ в Lazarus. Возможно ли?
Модератор: Модераторы
Вставка кода С++ в Lazarus. Возможно ли?
Возможно ли в 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-шнике.
Возможно, есть еще какие-то варианты решения вопроса?
Если ДА, то как? Где почитать? Примеры?
В частности: Я хочу использовать в своем проекте некоторый функционал этой программы:
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-шнике.
Возможно, есть еще какие-то варианты решения вопроса?
Re: Вставка кода С++ в Lazarus. Возможно ли?
Если нет проблем с лицензиями, то попробуй прилинковать статически содержимое внешней DLL.
Re: Вставка кода С++ в Lazarus. Возможно ли?
Если не хотите DLL, то придётся переписывать функции под синтаксис паскаля.
Re: Вставка кода С++ в Lazarus. Возможно ли?
Обнаружил порт указанного исходника на 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=
Автор
Но в Lazarus сиё чудо не компилится
Ошибка появляется в строках 377, 560, 1269.
Протестить исходник на D-2010 или D-7 не имею возможности.
Отличиями и тонкостями Delphi/Lazarus не владею.
Кто может подсказать как исправить ошибку?
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 не владею.
Кто может подсказать как исправить ошибку?
Re: Вставка кода С++ в Lazarus. Возможно ли?
Где текст ошибок? Телепатов нет!
Re: Вставка кода С++ в Lazarus. Возможно ли?
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?
И не обрезал ли я этим символом часть функционала?
Re: Вставка кода С++ в Lazarus. Возможно ли?
Данный символ обозначает указатель на тип tarray_of_words256_dv. По идее объявление было правильным.
Re: Вставка кода С++ в Lazarus. Возможно ли?
iskander писал(а):Eger писал(а):Кто может подсказать как исправить ошибку?Код: Выделить всё
{MODE DELPHI}
вам в помощь
Точнее:
Код: Выделить всё
{$MODE DELPHI}
