Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D

Ответ
 
Опции темы
Старый 08.05.2010, 17:08   #1
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Сообщение Написание DLL в Delphi для Blitz3D

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

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

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
.lib "Delphi.dll"
npumep$():"npumep" 
Закинул эти файлы в папку Userlibs. (т.е. куда и надо)

Создал пример-программу Delphi.bb
Graphics3D 800,600,32,2
MyText
$=npumep$ ();        <-------  БЕЗ СКОБОК ПУСТОСО СКОБКАМИ () ОШИБКА
Repeat
    Text 10
,10,"!!! "+MyText$+" !!!"
    
Flip
Until KeyHit
(1)=True 
В итоге выхожит ошибка | Memory access violation |.
Возможно где-то пустота или потеря данных
А может не совместимость String

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

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

function npumep():Integer;
begin
    Result
:=2010;
end
npumep%():"npumep" 
MyText=npumep()
Text 10,10,"!!! "+Str(MyText)+" !!!" 
Возможно в stringах обходимости совсем нет и обойти это можно. Но в данный момент мне нужно передать текст.
(Offline)
 
Ответить с цитированием
Старый 08.05.2010, 17:10   #2
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,853 пользователей)
Ответ: Написание DLL в Delphi для Blitz3D

function npumep(S:PChar):PChar;
begin 
    Result
:='Blitz3D npuBeT u3 Delphi 7'
end
Если с PChar не покатит то PAnsiChar
Дело в том что делфийский String это щачло карпа которое понимает только Delphi. А везде принято использовать PChar тоесть грубо массив символов.
(Online)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
LLI.T.A.L.K.E.R. (08.05.2010)
Старый 08.05.2010, 17:15   #3
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Счастье Ответ: Написание DLL в Delphi для Blitz3D

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

Сообщение от Randomize Посмотреть сообщение
function npumep(S:PChar):PChar;
begin 
    Result
:='Blitz3D npuBeT u3 Delphi 7'
end
Если с PChar не покатит то PAnsiChar
Дело в том что делфийский String это щачло карпа которое понимает только Delphi. А везде принято использовать PChar тоесть грубо массив символов.
Сработало!!!
(Offline)
 
Ответить с цитированием
Старый 08.05.2010, 17:17   #4
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,853 пользователей)
Ответ: Написание DLL в Delphi для Blitz3D

Всё что пожелаешь. Можешь к dll ещё Dll приделать если очень хочется.
(Online)
 
Ответить с цитированием
Старый 10.05.2010, 02:37   #5
Пётр
Нуждающийся
 
Регистрация: 23.05.2007
Сообщений: 95
Написано 34 полезных сообщений
(для 53 пользователей)
Ответ: Написание DLL в Delphi для Blitz3D

Попробуй библиотеку из архива.
Имя функции такое же, т. е. npumep()
В скобках функции ничего не передавать!
Вложения
Тип файла: rar MyDLL.rar (1.2 Кб, 538 просмотров)
(Offline)
 
Ответить с цитированием
Старый 11.05.2010, 10:04   #6
Damp
Знающий
 
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений
(для 133 пользователей)
Ответ: Написание DLL в Delphi для Blitz3D

"Например Indy"
C Indy дополнитеьных dll с проектом тоскать не нужно будет, но спешу огорчить многие события Indy (сети точно) не будут работать в dll (как минимум мне не удалось заставить их работать).
(Offline)
 
Ответить с цитированием
Старый 11.05.2010, 15:08   #7
Ganociy
Разработчик
 
Аватар для Ganociy
 
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений
(для 74 пользователей)
Ответ: Написание DLL в Delphi для Blitz3D

Слушайте, а если я в длл для Блица опишу команды создания кнопок(и т.д.), кторые входят в команды Delphi, Блиц будет создавать мне кнопки?
__________________
Самый первый и самый великий программист - это Бог.
(Offline)
 
Ответить с цитированием
Старый 11.05.2010, 19:25   #8
Damp
Знающий
 
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений
(для 133 пользователей)
Ответ: Написание DLL в Delphi для Blitz3D

Сообщение от Ganociy Посмотреть сообщение
Слушайте, а если я в длл для Блица опишу команды создания кнопок(и т.д.), кторые входят в команды Delphi, Блиц будет создавать мне кнопки?
В отдельном окне только.
(Offline)
 
Ответить с цитированием
Старый 11.05.2010, 20:54   #9
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,853 пользователей)
Ответ: Написание DLL в Delphi для Blitz3D

В функцию ты должен будешь ещё передавать хендл окна.
( SystemProprty("AppHWND") )
И да. TButton тут не прокатит.
Тебе нужно будет использовать чистый WinApi.
Или создавать отдельное TForm окно, но это уже не интересно.
(Online)
 
Ответить с цитированием
Старый 11.05.2010, 20:55   #10
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Написание DLL в Delphi для Blitz3D

Сообщение от Damp Посмотреть сообщение
В отдельном окне только.
Хм, а если передать в DLL указатель на блитцевское окно и перекинуть в него (в окно) кнопки с помощью windows.SetParent? Не примет?
(Offline)
 
Ответить с цитированием
Старый 12.05.2010, 09:46   #11
Damp
Знающий
 
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений
(для 133 пользователей)
Ответ: Написание DLL в Delphi для Blitz3D

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

В таком случае наверно проще не делфи из под блица, а блиц из под делфи использовать (сдк).
(Offline)
 
Ответить с цитированием
Старый 17.05.2010, 13:15   #12
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Лампочка Ответ: Написание 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(TextChar)Char; в Blitz3D отображается такое:


При завершении программы, когда с Blitz3d отправляешь данные на обработку в скобках:
Graphics3D 800,600,32,2
MyText$=TextAdd("OTnpaBka")
выходит ошибка:


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

А так же при пробе отправить integer 23423450 после обработке IntToStr()+'текст' - Blitz3D вообще как-то отобразил примерно "101021012 текст"
(Offline)
 
Ответить с цитированием
Старый 17.05.2010, 14:14   #13
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Написание DLL в Delphi для Blitz3D

Хм.. в общем чем дальше - тем больше проблем с этим будет..
Попробовал Indy, в итоге | Memory access violation |
(Offline)
 
Ответить с цитированием
Старый 17.05.2010, 19:16   #14
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Написание DLL в Delphi для Blitz3D

Сообщение от LLI.T.A.L.K.E.R. Посмотреть сообщение
Код файла 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 в параметрах.
(Offline)
 
Ответить с цитированием
Старый 17.05.2010, 20:54   #15
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Написание DLL в Delphi для Blitz3D

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


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

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

Вообще ошибка выходит при отправки данных в скобках, по decls такому
npumep$(site%) : "npumep"
blitz3D.bb
MyText$=npumep(1)
- здесь в скобках хоть что пиши.. хоть число, хочть "слово" - всё равно ошибка

delphi.dll
function npumep(x:integer):PChar;
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com