<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[QUIK -> DDE &mdash; помогите подружить делфи с луа через длл]]></title>
		<link>https://quik2dde.ru/viewtopic.php?id=386</link>
		<atom:link href="https://quik2dde.ru/extern.php?action=feed&amp;tid=386&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «помогите подружить делфи с луа через длл».]]></description>
		<lastBuildDate>Wed, 05 Oct 2022 19:47:47 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: помогите подружить делфи с луа через длл]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3768#p3768</link>
			<description><![CDATA[<p>В любом случае спасибо огромное! задуманное мной работает, хоть и не так просто, как хотелось бы, - через реестр хотя бы нет ошибок записи это уже плюс.</p>]]></description>
			<author><![CDATA[null@example.com (bilobrovandrey)]]></author>
			<pubDate>Wed, 05 Oct 2022 19:47:47 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3768#p3768</guid>
		</item>
		<item>
			<title><![CDATA[Re: помогите подружить делфи с луа через длл]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3748#p3748</link>
			<description><![CDATA[<p>Получается вы в два разных процесса подключаете одну DLL.<br />Но память-то у процессов разная же. Понятно, что значения, записанные в переменные в одном процессе, вы не прочитаете в другом.<br />Надо использовать какие-то хранилища, которые общие для разных процессов. (Например, вы использовали реестр)</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Wed, 05 Oct 2022 04:51:13 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3748#p3748</guid>
		</item>
		<item>
			<title><![CDATA[Re: помогите подружить делфи с луа через длл]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3746#p3746</link>
			<description><![CDATA[<p>implementation</p><p>function strtodelphi():ansistring; external &#039;SimpleDelphiLua.dll&#039; ;</p><p>procedure TForm1.buferDblClick(Sender: TObject);<br />begin<br />bufer.lines.add(string(strtodelphi));<br />end;</p><p>поправил ничего не изменилось<br />&nbsp; <br />вызов осуществляется из проги дельфи</p>]]></description>
			<author><![CDATA[null@example.com (bilobrovandrey)]]></author>
			<pubDate>Tue, 04 Oct 2022 18:18:38 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3746#p3746</guid>
		</item>
		<item>
			<title><![CDATA[Re: помогите подружить делфи с луа через длл]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3745#p3745</link>
			<description><![CDATA[<p>Действительно в горячке написал лишний букв)<br />стучусь головой об клаву)))</p>]]></description>
			<author><![CDATA[null@example.com (bilobrovandrey)]]></author>
			<pubDate>Tue, 04 Oct 2022 18:08:37 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3745#p3745</guid>
		</item>
		<item>
			<title><![CDATA[Re: помогите подружить делфи с луа через длл]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3701#p3701</link>
			<description><![CDATA[<div class="codebox"><pre><code>function strtodelphi():string;stdcall //это вызываем из дельфи получаем строго &#039;неудача&#039;
begin
if s&lt;&gt;nil then Result:=string(s) else result:=&#039;неудача&#039;;
end;
exports strtodelphi;</code></pre></div><p>Этот кусок я не совсем понял.<br />А где осуществляется вызов strtodelphi?</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Mon, 03 Oct 2022 05:57:44 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3701#p3701</guid>
		</item>
		<item>
			<title><![CDATA[Re: помогите подружить делфи с луа через длл]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3700#p3700</link>
			<description><![CDATA[<p>Я писал:</p><p>Сделайте так:</p><div class="codebox"><pre><code>var
   s: AnsiString;</code></pre></div><p>В вашем коде:</p><div class="codebox"><pre><code>var s:pansistring;</code></pre></div><p>&quot;Как тебя понимать, Саид?&quot; (с)</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Mon, 03 Oct 2022 05:52:43 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3700#p3700</guid>
		</item>
		<item>
			<title><![CDATA[Re: помогите подружить делфи с луа через длл]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3696#p3696</link>
			<description><![CDATA[<p>unit LuaFuncImpl;<br />interface</p><p>uses lua53, lauxlib, lualib,Registry;<br />&nbsp; function forLua_str(L: Plua_State): Integer; cdecl;<br />&nbsp; function forLua_rstr(L: Plua_State): Integer; cdecl;</p><p>var s:pansistring;<br />implementation</p><p>uses Windows, SysUtils;</p><p>procedure Regstring(name, param : string); // реестр&nbsp; запись<br />var<br />&nbsp; reg&nbsp; : TRegIniFile;<br /> begin<br />&nbsp; reg := TRegIniFile.Create(&#039;&#039;);<br />&nbsp; reg.RootKey := HKEY_LOCAL_MACHINE;<br />&nbsp; &nbsp; &nbsp;//&nbsp; &nbsp;добавляем<br />&nbsp; &nbsp;try<br />&nbsp; &nbsp;reg.WriteString(&#039;Software\Leopold&#039;,name,param) ;<br />&nbsp; &nbsp;except&nbsp; &nbsp; //если нет такого ключа создаем<br />&nbsp; &nbsp; begin<br />&nbsp; &nbsp; reg.CreateKey(&#039;Leopold&#039;);<br />&nbsp; &nbsp; reg.WriteString(&#039;Software\Leopold&#039;,name,param) ;<br />&nbsp; &nbsp; end;<br />&nbsp; &nbsp;end;<br />&nbsp; //освобождаем память<br />&nbsp; reg.Free;<br /> end;<br /> function Regstringread(name : string):string; // реестр&nbsp; чтение<br />var<br />&nbsp; reg&nbsp; : TRegIniFile;<br /> begin<br /> reg := TRegIniFile.Create(&#039;&#039;);<br /> reg.RootKey := HKEY_LOCAL_MACHINE;<br />&nbsp; &nbsp;try&nbsp; &nbsp; //&nbsp; &nbsp;читаем<br />&nbsp; &nbsp;result:=reg.readString(&#039;Software\Leopold&#039;,name,&#039;&#039;) ;<br />&nbsp; &nbsp;except&nbsp; &nbsp;//ловим<br />&nbsp; &nbsp;result:=&#039;ошибка чтения реестра&#039;;<br />&nbsp; &nbsp;end;<br />&nbsp; //освобождаем память<br /> reg.Free;<br /> end;<br /> function forLua_str(L: Plua_State): Integer; cdecl;//пишем строку в реестр пытаемся записать для дельфи в переменную<br /> //первый&nbsp; аргумент название второй строка<br /> //вызываем в луа&nbsp; названиедлл.str(&quot;имя параметра&quot;,&quot;значение&quot;)<br />var<br />&nbsp; &nbsp; n,i: Integer;<br />&nbsp; &nbsp; ISTRFOUND: Boolean;<br />&nbsp; &nbsp; name,res: pansichar;</p><p> begin<br />&nbsp; &nbsp;n := lua_gettop(L);&nbsp; // количество переданных аргументов из луа<br />&nbsp; &nbsp; &nbsp; ISTRFOUND := false;<br />&nbsp; &nbsp; for i := 1 to n do<br />&nbsp; &nbsp; &nbsp; begin<br />&nbsp; &nbsp; &nbsp; &nbsp; if lua_type(L,i) = LUA_TSTRING then //проверка на стринг<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res :=lua_tostring(L,i); //записываем строку<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if i=1 then name:=res;//первай аргумент&nbsp; имя в реестре<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ISTRFOUND := true; //если аргументов более 2х в принципе можно сделать мультизапись пока не нужно<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;<br />&nbsp; &nbsp; &nbsp; end;</p><p>&nbsp; &nbsp; if ISTRFOUND then<br />&nbsp; &nbsp; &nbsp; &nbsp;begin<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// если найдено хоть однa строка<br />&nbsp; &nbsp; &nbsp; &nbsp;Regstring(name,res); //добавляем в реестр<br />&nbsp; &nbsp; &nbsp; &nbsp;s:=pansistring(res);// лажа не работает<br />&nbsp; &nbsp; &nbsp; &nbsp;//lua_pushstring(L,pansichar(s)) это пишет в луа по указателю l данные s<br />&nbsp; &nbsp; &nbsp; &nbsp;end<br />&nbsp; &nbsp; &nbsp; else<br />&nbsp; &nbsp; &nbsp; lua_pushnil(L);// если список аргументов пуст или в нем нет строки - функция вернет nil<br />&nbsp; &nbsp; &nbsp; Result := 1;&nbsp; // возвращаемое количество результатов<br /> end;</p><p> function forLua_rstr(L: Plua_State): Integer; cdecl;//*чтение с реестра переменной<br /> //вызываем в луа&nbsp; названиедлл.str(&quot;имя параметра&quot;)<br />&nbsp; &nbsp; &nbsp;var n:integer;<br />&nbsp; begin&nbsp; &nbsp;//данная функция запишет параметр из реестра в луа<br /> if lua_type(L,1) = LUA_TSTRING then //параметр из луа строка<br /> lua_pushstring(L,Regstringread(lua_tostring(L,1)))//параметр будет являтся именем переменной в реестре<br /> else lua_pushstring(L,pansichar(&#039;имя аргумента не является строкой&#039;));// при ошибке возвращаем в луа<br /> Result := 1;// возвращаемое количество результатов<br /> end;<br />&nbsp; &nbsp; &nbsp;function strtodelphi():string;stdcall //это вызываем из дельфи получаем строго &#039;неудача&#039;<br />begin<br />if s&lt;&gt;nil then Result:=string(s) else result:=&#039;неудача&#039;;<br />end;<br />exports strtodelphi;<br />end.</p><p>через реестр все прекрасно вносится напрямую дельфи с длл читать не хочет<br />dll=require &quot;SimpleDelphiLua&quot;<br />local is_run = true<br />function onclose()<br />&nbsp; &nbsp; is_run = false <br />end<br />function main()<br />&nbsp; &nbsp; while is_run do<br />&nbsp; wrreestr()<br />&nbsp; sleep(3000)<br />&nbsp; &nbsp; end<br />end</p><p>function wrreestr() -- запись текущих значен в реестр для обработки отображения параметров&nbsp; для делфи <br /> if dll.rstr(&#039;какоето_название&#039;)~=&#039;какая то строка&#039; then<br />&nbsp; &nbsp; &nbsp;dll.str(&#039;какоето_название&#039;,&#039;какая то строка&#039;) <br /> end<br />end</p>]]></description>
			<author><![CDATA[null@example.com (bilobrovandrey)]]></author>
			<pubDate>Sun, 02 Oct 2022 10:55:59 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3696#p3696</guid>
		</item>
		<item>
			<title><![CDATA[Re: помогите подружить делфи с луа через длл]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3653#p3653</link>
			<description><![CDATA[<p>Приведите полный текст библиотеки и ваш тестовый Lua-скрипт (или выложите куда-то).<br />Тогда можно было бы что-то прокомментировать из написанного вами.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Tue, 27 Sep 2022 05:13:48 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3653#p3653</guid>
		</item>
		<item>
			<title><![CDATA[Re: помогите подружить делфи с луа через длл]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3652#p3652</link>
			<description><![CDATA[<p>вот интересно) а я уже через реестр заморочился ... причем выводит в реестр на ура, но если без костылей эт просто кайф получится,спасибо сейчас затестим....<br />на сколько я понял данная функция имеет отношение только к луа то есть она не забирает строку а наоборот отдает ее в луа.<br />работает&nbsp; lua_tostring(L,i);(только при вызове из луа) где l указатель на переменную луа а i порядковый номер ее в стеке&nbsp; отсюда сделал дельфи функцию которая просто заносит переменную в реестр виндовс . То есть я в луа вызываю функцию в длл которая с помощью дельфи функции заносит переменную в реестр)) если я из дельфи вызываю переменную в длл она просто пуста либо значение если ей задать то для дельфи луа его не меняет .печаль. тоска уныние.&nbsp; остановлюсь тогда на реестре.</p>]]></description>
			<author><![CDATA[null@example.com (bilobrovandrey)]]></author>
			<pubDate>Mon, 26 Sep 2022 16:16:03 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3652#p3652</guid>
		</item>
		<item>
			<title><![CDATA[Re: помогите подружить делфи с луа через длл]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3638#p3638</link>
			<description><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>Какой тип переменной s ?</p></blockquote></div><div class="quotebox"><cite>bilobrovandrey пишет:</cite><blockquote><p>pansichar</p></blockquote></div><p>PAnsiChar - это указатель. Указатель на память.<br />Вы вызовом&nbsp; res :=lua_tostring(L,i); получили указатель в res, сохранили его в s. Но ведь по выходу из функции forLua_str() этот указатель становится уже невалидным.</p><p>Сделайте так:</p><div class="codebox"><pre><code>var
   s: AnsiString;</code></pre></div><p>И приведенный вами пример заработает.<br />Надо будет только поправить:<br />lua_pushstring(L,s) --&gt; lua_pushstring(L,PAnsiChar(s))</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Mon, 26 Sep 2022 02:29:15 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3638#p3638</guid>
		</item>
		<item>
			<title><![CDATA[Re: помогите подружить делфи с луа через длл]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3637#p3637</link>
			<description><![CDATA[<p>pansichar, возможно то что я задумал в принципе не возможно почитал тут умных людей;) получается что квик и делфи имеют разные области памяти в этой длл поэтому при обращение к одним и тем же переменным из дельфи и квика получаем разные данные. в этом случае фиаско) Мне нужно было именно передать из дельфи в луа и обратно данные.<br />пять раз перечитал ваш пост,правильно я понимаю, что переменная s не является данными записанными или считываемы в луа?<br />тогда мне надо писать процедуру по типу луа и как то выковыривать данные но уже для дельфи, хммм...</p><p>&nbsp; &nbsp; function dll:PansiChar;stdcall<br />begin<br /> Result:=lua_tostring(ldel,idel);<br />end;<br /> exports dll;<br />разве вот такая функция не должна отдавать в дельфи значение строки в переменной?<br />хотя это масло масляное...</p>]]></description>
			<author><![CDATA[null@example.com (bilobrovandrey)]]></author>
			<pubDate>Sun, 25 Sep 2022 17:35:15 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3637#p3637</guid>
		</item>
		<item>
			<title><![CDATA[Re: помогите подружить делфи с луа через длл]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3636#p3636</link>
			<description><![CDATA[<p>Какой тип переменной s ?</p><p>И еще.<br /></p><div class="codebox"><pre><code>res := &#039;&#039;;</code></pre></div><p>Странное место, ведь res - это указатель PAnsiChar</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Sat, 24 Sep 2022 18:21:30 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3636#p3636</guid>
		</item>
		<item>
			<title><![CDATA[Re: помогите подружить делфи с луа через длл]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3632#p3632</link>
			<description><![CDATA[<p>голова кругом) пожалуйста ткните носом&nbsp; мне надо lua--&gt; dll--&gt;delphi обратка то у меня работает а вот выдернуть из длл переменную не получается(<br />вот 2 функции&nbsp; записать считать строковый параметр.<br /> s переменная где он хранится, ee хочу выденуть, но не получается<br />function forLua_str(L: Plua_State): Integer; cdecl;<br />var<br />&nbsp; &nbsp; n,i: Integer;<br />&nbsp; &nbsp; isNumberFound: Boolean;<br />&nbsp; &nbsp; res:pansichar;<br />begin<br />&nbsp; &nbsp;n := lua_gettop(L);&nbsp; // количество переданных аргументов<br />&nbsp; &nbsp;res := &#039;&#039;;<br />&nbsp; &nbsp;isNumberFound := false;<br />&nbsp; &nbsp; for i := 1 to n do<br />&nbsp; &nbsp; &nbsp; begin<br />&nbsp; &nbsp; &nbsp; &nbsp; if lua_type(L,i) = LUA_TSTRING then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res :=lua_tostring(L,i);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isNumberFound := true;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;<br />&nbsp; &nbsp; &nbsp; end;</p><p>&nbsp; &nbsp; if isNumberFound then<br />&nbsp; &nbsp; &nbsp; &nbsp;begin<br />&nbsp; &nbsp; &nbsp; &nbsp;lua_pushstring(L, res);&nbsp; // если найдено хоть однa строка в аргументах - возвращаем ее<br />&nbsp; &nbsp; &nbsp; &nbsp;s:=res;<br />&nbsp; &nbsp; &nbsp; &nbsp;end<br />&nbsp; &nbsp; else<br />&nbsp; &nbsp; &nbsp; &nbsp; lua_pushnil(L);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// если список аргументов пуст или в нем нет строк - функция вернет nil<br />&nbsp; &nbsp; &nbsp; Result := 1;&nbsp; // возвращаемое количество результатов<br />end;<br />&nbsp; &nbsp; &nbsp;function forLua_rstr(L: Plua_State): Integer; cdecl;&nbsp; &nbsp; //*чтение с переменной<br />&nbsp; begin<br /> if s&lt;&gt;nil then<br />&nbsp; &nbsp; &nbsp; &nbsp;lua_pushstring(L,s)<br />&nbsp; &nbsp; &nbsp; &nbsp;else lua_pushstring(L,pansichar(&#039;нет параметра&#039;)); // возвращаемое количество результатов<br />&nbsp; &nbsp; &nbsp;Result := 1;<br />end;</p>]]></description>
			<author><![CDATA[null@example.com (bilobrovandrey)]]></author>
			<pubDate>Sat, 24 Sep 2022 16:20:43 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3632#p3632</guid>
		</item>
		<item>
			<title><![CDATA[Re: помогите подружить делфи с луа через длл]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3630#p3630</link>
			<description><![CDATA[<p>Не надо гадать.<br />Почитайте статьи про Lua API, посмотрите на пример на этой сайте, там есть пример функций принимающих/возвращающих значения.</p><p>Посмотрите на буквально соседнюю тему, там есть ссылки на статьи. Примеры обычно на Си, но это ж не проблема.</p><div class="quotebox"><cite>bilobrovandrey пишет:</cite><blockquote><p>function str():pansichar;cdecl;</p></blockquote></div><p>Не пойму, это прототип функции, которая вызывается в DLL непосредственно из Lua?? Или что это?</p><p>Для функций, вызываемых в DLL из Lua, прототип всегда должен быть только таким:</p><div class="codebox"><pre><code>function dll_function_for_lua(L: Plua_State): Integer; cdecl;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Sat, 24 Sep 2022 15:35:39 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3630#p3630</guid>
		</item>
		<item>
			<title><![CDATA[Re: помогите подружить делфи с луа через длл]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3629#p3629</link>
			<description><![CDATA[<p>а как в дельфи отобразить переменные из луа?<br />делаю переменную типа s:pansichar;<br />для луа 2 функции одна записывает в нее , вторая читает.<br />на когда я хочу дельфи ее прочитать из длл там либо нил либо любое значение присвоенное вне функций луа??<br />при этом в луа все работает как часы... всю голову изломал)<br />function str():pansichar;cdecl;<br />&nbsp; begin<br />&nbsp; result:=s;<br />&nbsp; end;<br />&nbsp; &nbsp;exports str;</p>]]></description>
			<author><![CDATA[null@example.com (bilobrovandrey)]]></author>
			<pubDate>Sat, 24 Sep 2022 13:13:30 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3629#p3629</guid>
		</item>
	</channel>
</rss>
