<?xml version="1.0"?>
<rss version="2.0"><channel><title>DLL &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x445; &#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441;&#x43E;&#x432;</title><link>https://fire-monkey.ru/forum/189-dll/</link><description>DLL &#x43F;&#x43E;&#x441;&#x43B;&#x435;&#x434;&#x43D;&#x438;&#x445; &#x432;&#x43E;&#x43F;&#x440;&#x43E;&#x441;&#x43E;&#x432;</description><language>ru</language><item><title>AccessViolation &#x43F;&#x440;&#x438; &#x437;&#x430;&#x43A;&#x440;&#x44B;&#x442;&#x438;&#x438; FMX &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;, &#x438;&#x441;&#x43F;&#x43E;&#x43B;&#x44C;&#x437;&#x443;&#x44E;&#x449;&#x435;&#x433;&#x43E; FMX Dll &#x441; ShowMessage()</title><link>https://fire-monkey.ru/topic/8300-accessviolation-%D0%BF%D1%80%D0%B8-%D0%B7%D0%B0%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D0%B8-fmx-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D1%8E%D1%89%D0%B5%D0%B3%D0%BE-fmx-dll-%D1%81-showmessage/</link><description><![CDATA[<p>
	Здравствуйте, коллеги. Использую RAD Studio 10.3 и FMX Linux 1.65.  Столкнулся с проблемой как говорится 'на ровном месте'. Приложение и Dll написаны с использованием FMX. Оставил только минимум (убрал не только функционал но и проверки). Нажатие на кнопку может происходить по несколько раз, проблем нет. А при закрытии приложения возникает AccessViolation. Настоящие приложение и библиотека более сложные, тут для примера оставил минимум. Первоначально в библиотеке было создание формы. Пробовал передавать в библиотеку Application и Screen. Ошибка при закрытии приложения та же. В итоге создал простые exe и dll, добавил минимум... Ошибка AV при закрытии приложения. В чем дело? Тот же код в VCL работает нормально. 
</p>

<p>
	Главное приложение  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
</p>

<p>
	unit formGetForm;
</p>

<p>
	interface<br />
	uses<br />
	  System.SysUtils, System.Types, System.Classes, Winapi.Windows,<br />
	  FMX.Forms, FMX.Controls, FMX.Controls.Presentation, FMX.Types, FMX.StdCtrls;
</p>

<p>
	type<br />
	  P_Get = procedure; safecall;<br />
	  TfrmGetForm = class(TForm)<br />
	    Button1: TButton;<br />
	    procedure Button1Click(Sender: TObject);<br />
	  private<br />
	    { Private declarations }<br />
	  public<br />
	    { Public declarations }<br />
	  end;
</p>

<p>
	var frmGetForm: TfrmGetForm;
</p>

<p>
	implementation<br />
	{$R *.fmx}
</p>

<p>
	procedure TfrmGetForm.Button1Click(Sender: TObject);<br />
	var  hDll:HMODULE;<br />
	       F_Get:P_Get;<br />
	begin<br />
	   if(hDll=0) then<br />
	    begin<br />
	     hDll:=LoadLibrary('evTestForm.dll');<br />
	     F_Get := P_Get(GetProcAddress(hDll,'Get_F'));<br />
	     F_Get;<br />
	     FreeLibrary(hDll);<br />
	     hDll:=0;<br />
	    end;<br />
	end;
</p>

<p>
	end.
</p>

<p>
	Dll  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br />
	library evTestForm;<br />
	uses<br />
	  FMX.Dialogs;
</p>

<p>
	{$R *.res}<br />
	procedure Get_F;  safecall;<br />
	begin<br />
	 ShowMessage('+++');<br />
	end;
</p>

<p>
	exports   Get_F;
</p>

<p>
	begin<br />
	end.
</p>

<p>
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
</p>

<p>
	Если заменю  FMX.Dialogs; на  VCL.Dialogs; приложение закрывается без AV. 
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">8300</guid><pubDate>Mon, 06 Mar 2023 15:11:17 +0000</pubDate></item><item><title>&#x41F;&#x440;&#x43E;&#x431;&#x43B;&#x435;&#x43C;&#x44B; &#x43F;&#x440;&#x438; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x447;&#x438; &#x441;&#x442;&#x440;&#x443;&#x43A;&#x442;&#x443;&#x440;&#x44B; (struct) &#x441; &#x44F;&#x437;&#x44B;&#x43A;&#x430; C++ &#x432; Delphi</title><link>https://fire-monkey.ru/topic/6858-%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D1%8B-%D0%BF%D1%80%D0%B8-%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B8-%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B-struct-%D1%81-%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0-c-%D0%B2-delphi/</link><description><![CDATA[<p>
	Всем доброго времени суток, имеется проблема...<br /><br />
	Есть библиотека <a href="https://sciter.com/" rel="external nofollow">sciter</a>, я хочу ее использовать в Delphi, но имеющиеся там *привязки*(bindings) ориентированы на Delphi 7 (но это не самое главное, они рассчитаны на версию библиотеки 3.x, в то время, как библиотека уже давно 4.4.x, собственно там много чего нет).<br />
	Но у библиотеки есть C PLAIN API, при помощи которого можно запросто подружить ее с Delphi, чем я собственно и занимаюсь, но возникла проблема..<br /><br />
	Есть основная функция, которая возвращает структуру с кучей других функций (ISciterAPI), она в принципе работает, некоторые функции я пробовал из нее вызывать и они работали отлично, но работают лишь несколько первых функций нормально, остальные же сыплются на Access Violation, хотя на других языках это работает нормально. <br /><br />
	Структура выглядит таким образом, потом при помощи другой функции возвращается указатель на эту структуру ISciterAPI* (В самой структуре функций намного больше).
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">typedef struct ISciterAPI {
  UINT version;
  LPCWSTR SciterClassName(void);
  UINT SciterVersion(BOOL major);
};
typedef ISciterAPI* LPSciterAPI;</span></pre>

<p>
	В Delphi я все оформляю так:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">type
  PSciterAPI = ^ISciterAPI;
  ISciterAPI = packed record
    version: UINT;
    SciterClassName: function(): LPCWSTR; // LPCWSTR - PWideChar;
    SciterVersion: function(major: Integer): UINT; // Использовал до этого BOOL, но наткнулся на статью, где рассказывалось о том, что он немного странно работает, мол BOOL false = 0, а BOOL true = -1; Поэтому напрмиер функция SciterVersion у меня не работала правильно, но при использовании Integer все стало нормально работать.
  end;</span></pre>

<p>
	Но, как я уже сказал ранее - <strong>только некоторые функции работают, остальные падают с исключением ACCESS VIOLATION.</strong>
</p>

<p>
	Почему так может быть?
</p>

<p>
	P.S: Единственный пока рабочий для меня вариант - написание отдельной библиотеки, которая выносит все эти функции в экспорт, соответственно их теперь можно вызывать непосредственно из самой библиотеки, минуя ISciterAPI, но минусы такого подхода в том, что эта библиотека по сути является посредником между программой на Delphi и Sciter...
</p>]]></description><guid isPermaLink="false">6858</guid><pubDate>Sun, 04 Oct 2020 04:55:35 +0000</pubDate></item><item><title>&#x410;&#x43D;&#x430;&#x43B;&#x43E;&#x433; IStream &#x434;&#x43B;&#x44F; FMX</title><link>https://fire-monkey.ru/topic/3044-analog-istream-dlya-fmx/</link><description><![CDATA[<p>
	В VCL для передачи TStream из dll, обычно использую IStream, через пару TStreamAdapter/TOleStream. Но в FMX я что то не нашел им замену. Конечно, можно пойти путем что бы написать обертки для каждой OS. Но может есть какой то универсальный подход? 
</p>]]></description><guid isPermaLink="false">3044</guid><pubDate>Fri, 29 Jul 2016 15:19:34 +0000</pubDate></item><item><title>&#x417;&#x430;&#x432;&#x438;&#x441;&#x430;&#x43D;&#x438;&#x435; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F; &#x43F;&#x440;&#x438; &#x432;&#x44B;&#x433;&#x440;&#x443;&#x437;&#x43A;&#x435; dll &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x438; &#x441; &#x444;&#x43E;&#x440;&#x43C;&#x43E;&#x439; FireMonkey</title><link>https://fire-monkey.ru/topic/644-%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BF%D1%80%D0%B8-%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B5-dll-%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B8-%D1%81-%D1%84%D0%BE%D1%80%D0%BC%D0%BE%D0%B9-firemonkey/</link><description><![CDATA[
<p>Здравствуйте. Возникла следующая проблема. Создал dll библиотеку с формой FireMonkey. Из приложения на VCL подключаю библиотеку, вызываю функцию создания формы</p>
<pre class="ipsCode prettyprint">
procedure CreateHD;
begin
  FormHD := TFormHD.Create(nil);
  FormHD.Caption := 'HD';
  FormHD.Show;
end;</pre>
<p>форма создаётся, далее вызываю функцию закрытия и уничтожения формы FM</p>
<pre class="ipsCode prettyprint">
procedure CloseHD;
begin
  FormHD.Close;
  FreeAndNil(FormHD);
end;</pre>
<p>Но при попытке выгрузить dll приложение зависает.</p>
<p> </p>
<p>Возможно уничтожение формы FM как-то отличается от VCL и нужно что-то вызвать ещё кроме FreeAndNil или проблема в другом?</p>
<p> </p>
<p>(dll и приложение написаны в Delphi XE6)</p>
<p><a href="https://fire-monkey.ru/applications/core/interface/file/attachment.php?id=556">Приложение.zip</a></p>
]]></description><guid isPermaLink="false">644</guid><pubDate>Fri, 10 Oct 2014 11:08:22 +0000</pubDate></item><item><title>&#x432;&#x441;&#x442;&#x440;&#x430;&#x438;&#x432;&#x430;&#x43D;&#x438;&#x435; Fire Monkey &#x432; Windows &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435;</title><link>https://fire-monkey.ru/topic/958-%D0%B2%D1%81%D1%82%D1%80%D0%B0%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-fire-monkey-%D0%B2-windows-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5/</link><description><![CDATA[
<p>Подскажите пожалуйста, каким образом можно встроить фрейм Fire Monkey в окно Windows приложения в DLL?  Есть HWND родительского окна и форма Fire Monkey должна отображаться как дочернее окно. Если возможно дать ссылку на пример C++ Builder XE7. </p>
]]></description><guid isPermaLink="false">958</guid><pubDate>Sat, 31 Jan 2015 16:28:29 +0000</pubDate></item><item><title>&#x41F;&#x43E;&#x447;&#x435;&#x43C;&#x443; &#x43F;&#x440;&#x438; &#x437;&#x430;&#x43A;&#x440;&#x44B;&#x442;&#x438;&#x438; "dll &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x44F;" &#x437;&#x430;&#x43A;&#x440;&#x44B;&#x432;&#x430;&#x435;&#x442;&#x441;&#x44F; &#x43E;&#x441;&#x43D;&#x43E;&#x432;&#x43D;&#x43E;&#x435; &#x43F;&#x440;&#x438;&#x43B;&#x43E;&#x436;&#x435;&#x43D;&#x438;&#x435; &#x43E;&#x442;&#x43A;&#x443;&#x434;&#x430; &#x431;&#x44B;&#x43B;&#x430; &#x432;&#x44B;&#x437;&#x432;&#x430;&#x43D;&#x430; &#x414;&#x41B;&#x41B;</title><link>https://fire-monkey.ru/topic/3954-%D0%BF%D0%BE%D1%87%D0%B5%D0%BC%D1%83-%D0%BF%D1%80%D0%B8-%D0%B7%D0%B0%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D0%B8-dll-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B7%D0%B0%D0%BA%D1%80%D1%8B%D0%B2%D0%B0%D0%B5%D1%82%D1%81%D1%8F-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D0%BE%D0%B5-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BE%D1%82%D0%BA%D1%83%D0%B4%D0%B0-%D0%B1%D1%8B%D0%BB%D0%B0-%D0%B2%D1%8B%D0%B7%D0%B2%D0%B0%D0%BD%D0%B0-%D0%B4%D0%BB%D0%BB/</link><description><![CDATA[
<p>
	В одном из вопросов выше был представлена тестовая программка - которая грузила форму из DLL, так вот я не совсем понимаю логику работы Application у FMX. Так вот если посмотреть внимательней то при вызова формы из Dll мы по сути запускаем "новое оконное приложение" (о чем свидетельствует плашка в трее). и если мы закроем данный Handle - то по не понятным причинам закроется и основная программа. Почему Application основной программы вдруг начинает считать своей главной формой ту форму которая была вызвана в Dll, или работает какая либо другая логика.
</p>

<p>
	дублирую тестовый пример (не мой)
</p>

<p><a class="ipsAttachLink" href="//fire-monkey.ru/applications/core/interface/file/attachment.php?id=2891">Form from DLL.rar</a></p>]]></description><guid isPermaLink="false">3954</guid><pubDate>Wed, 22 Mar 2017 16:06:56 +0000</pubDate></item><item><title>&#x427;&#x442;&#x43E; &#x44F; &#x434;&#x435;&#x43B;&#x430;&#x44E; &#x43D;&#x435; &#x442;&#x430;&#x43A; &#x43F;&#x440;&#x438; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x435; &#x441; DLL &#x431;&#x438;&#x431;&#x43B;&#x438;&#x43E;&#x442;&#x435;&#x43A;&#x430;&#x43C;&#x438; &#x438;&#x437; FireMonkey?</title><link>https://fire-monkey.ru/topic/145-%D1%87%D1%82%D0%BE-%D1%8F-%D0%B4%D0%B5%D0%BB%D0%B0%D1%8E-%D0%BD%D0%B5-%D1%82%D0%B0%D0%BA-%D0%BF%D1%80%D0%B8-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5-%D1%81-dll-%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0%D0%BC%D0%B8-%D0%B8%D0%B7-firemonkey/</link><description><![CDATA[
<p>Здравствуйте.</p>
<p> </p>
<p>Есть проблема, с которой не могу разобраться уже на протяжении какого-то времени.</p>
<p> </p>
<p>Суть проблемы.</p>
<p>Создаю dll библиотеку и сую туда форму со своим функционалом (Delphi, RAD Studio XE5). Динамически подгружаю в приложение и по сути всё работает, но... Когда же я хочу выгрузить приложение я получаю, либо ряд ошибок AV, либо зависание всего приложение при выполнении FreeLibrary, либо неизвестную мне ошибку "DXGI ERROR: CreateDXGIFactory cannot be called from DllMain. [ MISCELLANEOUS ERROR #76: ]".</p>
<p>Так же не могу понять, как передать Handle приложения в библиотеку (в VSL это было довольно просто).</p>
<p> </p>
<p>К сожалению никакой информации по данным вопросам я не смог найти, кроме не больших вырезок со своими недочётами.</p>
<p> </p>
<p>Прошу вас помочь в решении данных проблем.</p>
<p>Большое спасибо.</p>
<p> </p>
<p>С уважением, Ethernet.</p>
]]></description><guid isPermaLink="false">145</guid><pubDate>Sat, 15 Mar 2014 21:39:28 +0000</pubDate></item><item><title>&#x412;&#x44B;&#x437;&#x43E;&#x432; &#x444;&#x43E;&#x440;&#x43C;&#x44B; &#x438;&#x437; &#x434;&#x438;&#x43D;&#x430;&#x43C;&#x438;&#x447;&#x435;&#x441;&#x43A;&#x438;-&#x43F;&#x43E;&#x434;&#x43A;&#x43B;&#x44E;&#x447;&#x430;&#x435;&#x43C;&#x43E;&#x439; DLL</title><link>https://fire-monkey.ru/topic/203-%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2-%D1%84%D0%BE%D1%80%D0%BC%D1%8B-%D0%B8%D0%B7-%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8-%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D0%B5%D0%BC%D0%BE%D0%B9-dll/</link><description><![CDATA[
<p>Кто подскажет как правильно создать и вызвать (не модально) форму из dll ?</p>
<p> </p>
<p>Что имею в данный момент:</p>
<ol><li>Вызываем форму из dll - <strong><span style="color:#008000;">ОК</span></strong>
	</li><li>Форма появилась. Закрываем вызванную форму - <span style="color:#008000;"><strong>ОК</strong></span></li>
	<li>Закрываем приложение и получаем ошибку - <span style="color:#ff0000;"><strong>FAIL</strong></span></li>
	<li>Так же не понятный вопрос с Application. Handle в Firemonkey, класс TApplication есть, проперти Handle - нет. Пока поставил nil</li>
</ol><p>В отладчике заметил, что после закрытия и освобождения формы и библиотеки, через какое-то время стартуют ещё 3 потока. Если выждать время до старта этих 3-х потоков и после этого попытаться закрыть главное приложение, то ошибки не возникает !</p>
<p> </p>
<p>Проект прилагается. XE6. Спасибо. </p>
<p><a href="https://fire-monkey.ru/applications/core/interface/file/attachment.php?id=280">Form from DLL.zip</a></p>
]]></description><guid isPermaLink="false">203</guid><pubDate>Sun, 20 Apr 2014 21:23:58 +0000</pubDate></item><item><title>&#x412;&#x44B;&#x437;&#x43E;&#x432; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x438; &#x438;&#x437; DLL. &#x417;&#x430;&#x432;&#x438;&#x441;&#x430;&#x435;&#x442; &#x43F;&#x440;&#x438; Release &#x440;&#x435;&#x436;&#x438;&#x43C;&#x435; &#x43A;&#x43E;&#x43C;&#x43F;&#x438;&#x43B;&#x44F;&#x446;&#x438;&#x438;</title><link>https://fire-monkey.ru/topic/2936-%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8-%D0%B8%D0%B7-dll-%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B0%D0%B5%D1%82-%D0%BF%D1%80%D0%B8-release-%D1%80%D0%B5%D0%B6%D0%B8%D0%BC%D0%B5-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D0%B8/</link><description><![CDATA[
<p>
	Win32 приложение на Firemonkey
</p>

<p>
	Есть DLL написанная на C++. В ней есть экспортная функция.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">int getStatusFlags (int *fatalStatus, int *currentFlagsStatus, int *documentStatus);</span></pre>

<p>
	импортирую функцию следующим способом 
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">  function getStatusFlags (var fatalStatus, currentFlagsStatus, documentStatus:Integer):integer; stdcall; external DllName;</span></pre>

<p>
	В режиме компиляции Debug все идеально, но если откомпилировать в Release то приложение наглухо виснет при вызове функции.
</p>

<p>
	Подозреваю что я неправильно импортирую функцию и происходит неправильная работа с памятью. Пробовал менять тип передаваемых переменных на PInteger с передачей указателей, но все равно падает.
</p>

<p>
	Кто сталкивался. Помогите!
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">2936</guid><pubDate>Wed, 22 Jun 2016 16:20:41 +0000</pubDate></item></channel></rss>
