forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Написание DLL в Delphi для Blitz3D (http://forum.boolean.name/showthread.php?t=12480)

LLI.T.A.L.K.E.R. 08.05.2010 17:08

Написание DLL в Delphi для Blitz3D
 
Пробую делать Dll для Blitz3D на Delphi 7.
Первые тормоза появились при передачи обработанного текста из DLL-ки в программу Blitz3D.

Пишу на Delphi 7 (Pascal) - потому что мне пока здесь удобно.

PHP код:

library Delphi;

uses
    SysUtils
,
    
Classes;

{
$R *.res}

function 
npumep(S:string):string// <-------  В СКОБКАХ () ВОЗМОЖНО БЕЗ НИЧЕГО
begin
    Result
:='Blitz3D npuBeT u3 Delphi 7';
end;

exports npumep;

begin
end


Скомпилировал Delphi.dll
Создал Delphi.decls
PHP код:

.lib "Delphi.dll"
npumep$():"npumep" 

Закинул эти файлы в папку Userlibs. (т.е. куда и надо)

Создал пример-программу Delphi.bb
PHP код:

Graphics3D 800,600,32,2
MyText
$=npumep$ ();        <-------  БЕЗ СКОБОК ПУСТОСО СКОБКАМИ () ОШИБКА
Repeat
    Text 10
,10,"!!! "+MyText$+" !!!"
    
Flip
Until KeyHit
(1)=True 

В итоге выхожит ошибка | Memory access violation |.
Возможно где-то пустота или потеря данных :dontknow:
А может не совместимость String

При попытках где-то добавить или убрать текст$ в скобках, или приписать $ - получается пустой текст..

С Integer всё нормально передаётся.

PHP код:

function npumep():Integer;
begin
    Result
:=2010;
end

PHP код:

npumep%():"npumep" 

PHP код:

MyText=npumep()
Text 10,10,"!!! "+Str(MyText)+" !!!" 

Возможно в stringах обходимости совсем нет и обойти это можно. Но в данный момент мне нужно передать текст.

Randomize 08.05.2010 17:10

Ответ: Написание DLL в Delphi для Blitz3D
 
PHP код:

function npumep(S:PChar):PChar;
begin 
    Result
:='Blitz3D npuBeT u3 Delphi 7'
end

Если с PChar не покатит то PAnsiChar
Дело в том что делфийский String это щачло карпа которое понимает только Delphi. А везде принято использовать PChar тоесть грубо массив символов.

LLI.T.A.L.K.E.R. 08.05.2010 17:15

Ответ: Написание DLL в Delphi для Blitz3D
 
И ещё вопрос:
если я к Dll-ке в
Цитата:

uses SysUtils, Classes, IdUDPClient;
добавлю нестандартные модули к проекту (например для интернета, или утилиты всякие) - что в итоге потребует Blitz3D для использования?
Нужно ли будет к проекту докладывать Dll-ки от тех утилит? Например Indy.

Цитата:

Сообщение от Randomize (Сообщение 146459)
PHP код:

function npumep(S:PChar):PChar;
begin 
    Result
:='Blitz3D npuBeT u3 Delphi 7'
end

Если с PChar не покатит то PAnsiChar
Дело в том что делфийский String это щачло карпа которое понимает только Delphi. А везде принято использовать PChar тоесть грубо массив символов.

Сработало!!! :support:

Randomize 08.05.2010 17:17

Ответ: Написание DLL в Delphi для Blitz3D
 
Всё что пожелаешь. Можешь к dll ещё Dll приделать если очень хочется.

Пётр 10.05.2010 02:37

Ответ: Написание DLL в Delphi для Blitz3D
 
Вложений: 1
Попробуй библиотеку из архива.
Имя функции такое же, т. е. npumep()
В скобках функции ничего не передавать!

Damp 11.05.2010 10:04

Ответ: Написание DLL в Delphi для Blitz3D
 
"Например Indy"
C Indy дополнитеьных dll с проектом тоскать не нужно будет, но спешу огорчить многие события Indy (сети точно) не будут работать в dll (как минимум мне не удалось заставить их работать).

Ganociy 11.05.2010 15:08

Ответ: Написание DLL в Delphi для Blitz3D
 
Слушайте, а если я в длл для Блица опишу команды создания кнопок(и т.д.), кторые входят в команды Delphi, Блиц будет создавать мне кнопки?

Damp 11.05.2010 19:25

Ответ: Написание DLL в Delphi для Blitz3D
 
Цитата:

Сообщение от Ganociy (Сообщение 146663)
Слушайте, а если я в длл для Блица опишу команды создания кнопок(и т.д.), кторые входят в команды Delphi, Блиц будет создавать мне кнопки?

В отдельном окне только.

Randomize 11.05.2010 20:54

Ответ: Написание DLL в Delphi для Blitz3D
 
В функцию ты должен будешь ещё передавать хендл окна.
( SystemProprty("AppHWND") )
И да. TButton тут не прокатит.
Тебе нужно будет использовать чистый WinApi.
Или создавать отдельное TForm окно, но это уже не интересно.

ViNT 11.05.2010 20:55

Ответ: Написание DLL в Delphi для Blitz3D
 
Цитата:

Сообщение от Damp (Сообщение 146671)
В отдельном окне только.

Хм, а если передать в DLL указатель на блитцевское окно и перекинуть в него (в окно) кнопки с помощью windows.SetParent? Не примет?

Damp 12.05.2010 09:46

Ответ: Написание DLL в Delphi для Blitz3D
 
Мне кажется, если будет установлен Graphics3D то не получится, даже с winapi скорее всего.

В таком случае наверно проще не делфи из под блица, а блиц из под делфи использовать (сдк).

LLI.T.A.L.K.E.R. 17.05.2010 13:15

Ответ: Написание DLL в Delphi для Blitz3D
 
Проблема передачи данных (а так же текста) из Blitz3D в Delphi 7 и обратно.

Файл Delphi.bb
Код:

Graphics3D 800,600,32,2
MyText$=TextAdd("OTnpaBka")

Repeat
        Text 10,10,MyText$
        Flip
Until KeyHit(1)

Код файла DelphiText.dll
Код:

library DelphiText;

uses
  SysUtils, Classes;

{$R *.res}

function TextAdd(Text:String):PChar;
var OutText:String;
begin
  OutText:=Text+'. Принято!';
  Result:=PChar(OutText);
end;

exports TextAdd;

begin
end.

Файл DelphiText.decls
Код:

.lib "DelphiText.dll"
TextAdd$(Text$) : "TextAdd"

При изменении на function TextAdd(Text:PChar):PChar; в Blitz3D отображается такое:


При завершении программы, когда с Blitz3d отправляешь данные на обработку в скобках:
Код:

Graphics3D 800,600,32,2
MyText$=TextAdd("OTnpaBka")

выходит ошибка:


Основная проблема - Delphi не возвращает принятое, а Blitz3D при отправке данных, после завершении программы, пишет об ошибке.

А так же при пробе отправить integer 23423450 после обработке IntToStr()+'текст' - Blitz3D вообще как-то отобразил примерно "101021012 текст"

LLI.T.A.L.K.E.R. 17.05.2010 14:14

Ответ: Написание DLL в Delphi для Blitz3D
 
Хм.. в общем чем дальше - тем больше проблем с этим будет..
Попробовал Indy, в итоге | Memory access violation |

ViNT 17.05.2010 19:16

Ответ: Написание DLL в Delphi для Blitz3D
 
Цитата:

Сообщение от LLI.T.A.L.K.E.R. (Сообщение 147098)
Код файла DelphiText.dll
Код:

library DelphiText;

uses
  SysUtils, Classes;

{$R *.res}

function TextAdd(Text:String):PChar;
var OutText:String;
begin
  OutText:=Text+'. Принято!';
  Result:=PChar(OutText);
end;

exports TextAdd;

begin
end.


По идее, нужно попробовать заменить тип переменной Text на PChar, чтобы вообще избавиться от типа String в параметрах.

LLI.T.A.L.K.E.R. 17.05.2010 20:54

Ответ: Написание DLL в Delphi для Blitz3D
 
При изменении на function TextAdd(Text:PChar):PChar; в Blitz3D отображается такое:


Я уже больше склоняюсь к такому пути:
делать передачи данных через запись/чтение на файл out*.txt например... Но здесь ошибки будут при задержках записи и чтении

И думаю - зачем с этим гемором связался :-D
Но для текущего проекта это необходимо

Вообще ошибка выходит при отправки данных в скобках, по decls такому
Код:

npumep$(site%) : "npumep"
blitz3D.bb
Код:

MyText$=npumep(1)
- здесь в скобках хоть что пиши.. хоть число, хочть "слово" - всё равно ошибка

delphi.dll
Код:

function npumep(x:integer):PChar;


Часовой пояс GMT +4, время: 00:42.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot