Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2015, 08:15   #11
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,799
По умолчанию

Цитата:
Сообщение от Должно быть имя? Посмотреть сообщение
Все верно, это для PHP
Тогда советую описать изначальную задачу, и мы со Stilet-ом поделимся опытом с коллегой.
Vapaamies вне форума Ответить с цитированием
Старый 21.05.2015, 09:44   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А разве на ПХП невозможно ДЛЛ вызывать? О_о
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.05.2015, 14:56   #13
Должно быть имя?
Пользователь
 
Регистрация: 11.04.2015
Сообщений: 68
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Для ПХП? Ты типа плагина пишешь к нему?
Описал кое какой функционал - структуру php 5.6.* на delphi
И он ожил, можно писать и exe с eval Либо полноценный модуль php

Цитата:
Сообщение от Stilet Посмотреть сообщение
А разве на ПХП невозможно ДЛЛ вызывать? О_о
Нельзя вызвать... Ой, тока не надо тот функционал сюда переть, что на php.net описан, он уже устарел, и сами они его не рекомендуют использовать

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
Тогда советую описать изначальную задачу, и мы со Stilet-ом поделимся опытом с коллегой.
Изначальная задача, это вызвать любую библиотеку, по аналоговому функционалу в PHP
Код:
$result = DllCall("user32.dll", "int", "MessageBox", "hwnd", 0, "str", "Некоторый текст", "str", "Такой вот заголовок", "int", 0)
Но для начала была бы здорово саму Delphi наградить такой возможностью. Что то вроде
Цитата:
..
Args[0].VTypeInteger := 0;
Args[1].VPWideChar := 'Test';
Args[2].VPWideChar := 'Test';
Args[3].VTypeInteger := 0;
CallFunction('MessageBoxA', 'Int', Args);

.............................

Насчет своего языка, у меня где то завалялся свой проект, правда он на с++ правда он в прошлом autoIt выдрал нужный функционал, и синтаксис подправил... Кстати, на c++ я бы использовал LibFFi
Должно быть имя? вне форума Ответить с цитированием
Старый 21.05.2015, 15:08   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
здорово саму Delphi наградить такой возможностью.
Да зачем компилируемому языку такое?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.05.2015, 15:15   #15
Должно быть имя?
Пользователь
 
Регистрация: 11.04.2015
Сообщений: 68
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Да зачем компилируемому языку такое?
Дак а зачем я его наградил самым мощным ГУИ ?)))

Код:
<?php
	function FormOnMouseUp($Sender, $Button, $Shift, $x, $y) {

	}


	$Form1 = new TObject;
	$Application = new TApplication(NULL);
	$Application->Initialize();
	$Application->MainFormOnTaskbar = true;
	
	$Application->CreateForm((new TForm(NULL))->AsInstance->MetaclassType, PointerS($Form1));
	
	$Form1->OnMouseUp = 'FormOnMouseUp';
	
	$Application->Run();
?>
Должно быть имя? вне форума Ответить с цитированием
Старый 21.05.2015, 19:33   #16
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,799
По умолчанию

Цитата:
Сообщение от Должно быть имя? Посмотреть сообщение
Изначальная задача, это вызвать любую библиотеку, по аналоговому функционалу в PHP
Код:
$result = DllCall("user32.dll", "int", "MessageBox", "hwnd", 0, "str", "Некоторый текст", "str", "Такой вот заголовок", "int", 0)
Чтобы каждый раз не грузить-выгружать библиотеку и не искать имя функции, нужно сделать класс:
Код:
type
  TDynamicLibrary = class
  private
    FFunctions: TStrings;
  public
    constructor Create(FileName: string);
    destructor Destroy; override;
    function StandardCall(const FuncName: AnsiString; const Params: array of const): Integer;
    function CDeclaration(const FuncName: AnsiString; const Params: array of const): Integer;
  end;
Потом подсмотреть в KOL или у меня в CoreLite, как написаны вызовы wvsprintf и MessageBox на ассемблере и написать аналогично. В FFunctions кэшировать адреса функций, добавляя их через AddObject.

Для x64 вместо StandardCall и CDeclaration потребуется лишь одна процедура -- FastCall, ее реализацию придется уже в подстрочнике сгенерированного компилятором кода смотреть и курить доку. Сам пока под x64 на ассемблере не писал.
Vapaamies вне форума Ответить с цитированием
Старый 21.05.2015, 20:21   #17
Должно быть имя?
Пользователь
 
Регистрация: 11.04.2015
Сообщений: 68
По умолчанию

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
Чтобы каждый раз не грузить-выгружать библиотеку и не искать имя функции, нужно сделать класс:
Код:
type
  TDynamicLibrary = class
  private
    FFunctions: TStrings;
  public
    constructor Create(FileName: string);
    destructor Destroy; override;
    function StandardCall(const FuncName: AnsiString; const Params: array of const): Integer;
    function CDeclaration(const FuncName: AnsiString; const Params: array of const): Integer;
  end;
Потом подсмотреть в KOL или у меня в CoreLite, как написаны вызовы wvsprintf и MessageBox на ассемблере и написать аналогично. В FFunctions кэшировать адреса функций, добавляя их через AddObject.

Для x64 вместо StandardCall и CDeclaration потребуется лишь одна процедура -- FastCall, ее реализацию придется уже в подстрочнике сгенерированного компилятором кода смотреть и курить доку. Сам пока под x64 на ассемблере не писал.
Сейчас ковыряю и там есть реализация под 64
Должно быть имя? вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Dll в ресурсах и вызов функций из нее Obsever0 Общие вопросы Delphi 15 15.09.2015 23:46
Вызов функций из Dll Mik92 Общие вопросы Delphi 2 19.09.2014 19:00
Вызов функций из DLL в исполняемом файле. coNsept Общие вопросы .NET 0 12.12.2013 02:23
Вызов функций из DLL написанной на Delphi Boris777 Общие вопросы C/C++ 2 20.12.2011 10:53