<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=85802&amp;view=findpost&amp;p=635045</guid>
        <pubDate>Sun, 06 Mar 2005 23:15:39 +0000</pubDate>
        <title>Работа с DLL</title>
        <link>https://forum.sources.ru/index.php?showtopic=85802&amp;view=findpost&amp;p=635045</link>
        <description><![CDATA[Kanes: <span class='tag-size' data-value='14' style='font-size:14pt;'><span class="tag-color tag-color-named" data-value="purple" style="color: purple">Статическое подключение функций из DLL</span></span><br>
Итак, например вы создали DLL, в которой хранится набор математических функций.<br>
Те функции, которые вы собираетесь передовать в прогу, надо записать в разделе <strong class='tag-b'>exports</strong>, в коде вашей DLL.<br>
Например :<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">library Project2;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;SysUtils,</div><div class="code_line">&nbsp;&nbsp;Classes;</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.res}</div><div class="code_line">&nbsp;</div><div class="code_line">function MyFunction(параметры): значение ;</div><div class="code_line">begin</div><div class="code_line">.......................</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">exports MyFunction; //Экспортируем функции, процедуры и т.п.</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">end.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Компилируем библиотеку.<br>
А теперь открываем исходник вашей проги и в разделе INTERFACE записываем загружаемые функции.<br>
<br>
<strong class='tag-b'><span class='tag-u'>Способы загрузки экспортируемых функций</span></strong><br>
<br>
1) Самый простой :<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Function MyFunction(параметры) : значение; //Обьявляем функцию</div><div class="code_line">external &#39;MyDll.dll&#39;; //Название вашей DLL</div></ol></div></div></div></div><br>
2) По имени : <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Function MyFunction(параметры) : значение; //Обьявляем функцию</div><div class="code_line">external &#39;MyDll.dll&#39; name &#39;MyFunction&#39;; //Название вашей DLL, name - &nbsp;имя экспортируемой функции</div></ol></div></div></div></div><br>
3) По индексу : <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Function MyFunction(параметры) : значение; //Обьявляем функцию</div><div class="code_line">external &#39;MyDll.dll&#39; index 1; //Название вашей DLL, index - индекс функции внутри DLL</div></ol></div></div></div></div><br>
Не забудьте, что конструкцию <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">external &#39;MyDll.dll&#39;;</div></ol></div></div></div></div><br>
надо писать, после каждой экспортируемой функции, иначе появится ошибка,о том что функции не обьявлены :( <br>
Конец - кидаем DLL в папку с проектом и запускаем сам проект :D<br>
В архиве лежит нескомпилированный исходник всех трех примеров(прога+ДЛЛ)<br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Это сообщение было перенесено сюда или объединено из темы &quot;<a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=85795' target='_blank'>Dll в памяти,</a>&quot;</span></span>]]></description>
        <author>Kanes</author>
        <category>Hello, World&#33;</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=85802&amp;view=findpost&amp;p=634649</guid>
        <pubDate>Sun, 06 Mar 2005 16:39:26 +0000</pubDate>
        <title>Работа с DLL</title>
        <link>https://forum.sources.ru/index.php?showtopic=85802&amp;view=findpost&amp;p=634649</link>
        <description><![CDATA[s-mike: <span class='tag-size' data-value='14' style='font-size:14pt;'><span class="tag-color tag-color-named" data-value="purple" style="color: purple">Как загрузить DLL и вызвать из нее функцию?</span></span><br>
<br>
Нижеприведенный код загружает DLL в память, вызывает из нее функцию и выгружает DLL.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TMyProc = procedure(const N: Integer); stdcall;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Button1Click(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;MyProc: TMyProc;</div><div class="code_line">&nbsp;&nbsp;Lib: THandle;</div><div class="code_line">&nbsp;&nbsp;DLLName: string;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;DLLName := &#39;mydll.dll&#39;;</div><div class="code_line">&nbsp;&nbsp;if FileExists(DLLName) then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;Lib := LoadLibrary(PChar(DLLName));</div><div class="code_line">&nbsp;&nbsp; &nbsp;if Lib &#60; HINSTANCE_ERROR then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Win32Check(False);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// или</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// ShowMessage(&#39;Не удалось загрузить библиотеку &#39; + DLLName);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;MyProc := GetProcAddress(Lib, &#39;MyProc&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Assigned(MyProc) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;MyProc(123);</div><div class="code_line">&nbsp;&nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FreeLibrary(Lib);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div></ol></div></div></div></div>]]></description>
        <author>s-mike</author>
        <category>Hello, World&#33;</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=85802&amp;view=findpost&amp;p=634647</guid>
        <pubDate>Sun, 06 Mar 2005 16:34:53 +0000</pubDate>
        <title>Работа с DLL</title>
        <link>https://forum.sources.ru/index.php?showtopic=85802&amp;view=findpost&amp;p=634647</link>
        <description><![CDATA[s-mike: Здесь будут рассматриваться вопросы по работе с динамическими библиотеками.]]></description>
        <author>s-mike</author>
        <category>Hello, World&#33;</category>
      </item>
	
      </channel>
      </rss>
	