|
08.05.2010, 17:08
|
#1
|
Мастер
Регистрация: 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;
MyText=npumep() Text 10,10,"!!! "+Str(MyText)+" !!!"
Возможно в stringах обходимости совсем нет и обойти это можно. Но в данный момент мне нужно передать текст.
|
(Offline)
|
|
08.05.2010, 17:10
|
#2
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,358
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: Написание DLL в Delphi для Blitz3D
function npumep(S:PChar):PChar; begin Result:='Blitz3D npuBeT u3 Delphi 7'; end;
Если с PChar не покатит то PAnsiChar
Дело в том что делфийский String это щачло карпа которое понимает только Delphi. А везде принято использовать PChar тоесть грубо массив символов.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
08.05.2010, 17:15
|
#3
|
Мастер
Регистрация: 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
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,358
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: Написание DLL в Delphi для Blitz3D
Всё что пожелаешь. Можешь к dll ещё Dll приделать если очень хочется.
|
(Offline)
|
|
10.05.2010, 02:37
|
#5
|
Нуждающийся
Регистрация: 23.05.2007
Сообщений: 95
Написано 34 полезных сообщений (для 53 пользователей)
|
Ответ: Написание DLL в Delphi для Blitz3D
Попробуй библиотеку из архива.
Имя функции такое же, т. е. npumep()
В скобках функции ничего не передавать!
|
(Offline)
|
|
11.05.2010, 10:04
|
#6
|
Знающий
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений (для 133 пользователей)
|
Ответ: Написание DLL в Delphi для Blitz3D
"Например Indy"
C Indy дополнитеьных dll с проектом тоскать не нужно будет, но спешу огорчить многие события Indy (сети точно) не будут работать в dll (как минимум мне не удалось заставить их работать).
|
(Offline)
|
|
11.05.2010, 15:08
|
#7
|
Разработчик
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений (для 74 пользователей)
|
Ответ: Написание DLL в Delphi для Blitz3D
Слушайте, а если я в длл для Блица опишу команды создания кнопок(и т.д.), кторые входят в команды Delphi, Блиц будет создавать мне кнопки?
__________________
Самый первый и самый великий программист - это Бог.
|
(Offline)
|
|
11.05.2010, 19:25
|
#8
|
Знающий
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений (для 133 пользователей)
|
Ответ: Написание DLL в Delphi для Blitz3D
Сообщение от Ganociy
Слушайте, а если я в длл для Блица опишу команды создания кнопок(и т.д.), кторые входят в команды Delphi, Блиц будет создавать мне кнопки?
|
В отдельном окне только.
|
(Offline)
|
|
11.05.2010, 20:54
|
#9
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,358
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: Написание DLL в Delphi для Blitz3D
В функцию ты должен будешь ещё передавать хендл окна.
( SystemProprty("AppHWND") )
И да. TButton тут не прокатит.
Тебе нужно будет использовать чистый WinApi.
Или создавать отдельное TForm окно, но это уже не интересно.
|
(Offline)
|
|
11.05.2010, 20:55
|
#10
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Написание DLL в Delphi для Blitz3D
Сообщение от Damp
В отдельном окне только.
|
Хм, а если передать в DLL указатель на блитцевское окно и перекинуть в него (в окно) кнопки с помощью windows.SetParent? Не примет?
|
(Offline)
|
|
12.05.2010, 09:46
|
#11
|
Знающий
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений (для 133 пользователей)
|
Ответ: Написание DLL в Delphi для Blitz3D
Мне кажется, если будет установлен Graphics3D то не получится, даже с winapi скорее всего.
В таком случае наверно проще не делфи из под блица, а блиц из под делфи использовать (сдк).
|
(Offline)
|
|
17.05.2010, 13:15
|
#12
|
Мастер
Регистрация: 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(Text Char) 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
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Написание DLL в Delphi для Blitz3D
Хм.. в общем чем дальше - тем больше проблем с этим будет..
Попробовал Indy, в итоге | Memory access violation |
|
(Offline)
|
|
17.05.2010, 19:16
|
#14
|
Модератор
Регистрация: 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
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Написание DLL в Delphi для Blitz3D
При изменении на function TextAdd(Text Char) Char; в Blitz3D отображается такое:
Я уже больше склоняюсь к такому пути:
делать передачи данных через запись/чтение на файл out*.txt например... Но здесь ошибки будут при задержках записи и чтении
И думаю - зачем с этим гемором связался
Но для текущего проекта это необходимо
Вообще ошибка выходит при отправки данных в скобках, по decls такому
npumep$(site%) : "npumep"
blitz3D.bb
- здесь в скобках хоть что пиши.. хоть число, хочть "слово" - всё равно ошибка
delphi.dll
function npumep(x:integer):PChar;
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:20.
|