<?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=331768&amp;view=findpost&amp;p=2895284</guid>
        <pubDate>Mon, 16 May 2011 15:50:03 +0000</pubDate>
        <title>Экспорт функции из dll</title>
        <link>https://forum.sources.ru/index.php?showtopic=331768&amp;view=findpost&amp;p=2895284</link>
        <description><![CDATA[amk: Может у тебя эти варнинги просто не включены?]]></description>
        <author>amk</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=331768&amp;view=findpost&amp;p=2895249</guid>
        <pubDate>Mon, 16 May 2011 15:01:30 +0000</pubDate>
        <title>Экспорт функции из dll</title>
        <link>https://forum.sources.ru/index.php?showtopic=331768&amp;view=findpost&amp;p=2895249</link>
        <description><![CDATA[volod: Спасибо :). Не выдает: warning-ов - ноль.]]></description>
        <author>volod</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=331768&amp;view=findpost&amp;p=2895214</guid>
        <pubDate>Mon, 16 May 2011 14:08:57 +0000</pubDate>
        <title>Экспорт функции из dll</title>
        <link>https://forum.sources.ru/index.php?showtopic=331768&amp;view=findpost&amp;p=2895214</link>
        <description><![CDATA[amk: Оба, наверное.<br>В единице трансляции не может быть двух разных функций, с одинаковыми именем и параметрами, поэтому второе определение автоматически дополняется компилятором до первого.<br>А вот удобнее будет первый заголовок - меньше недоразумений, не примешь функцию за нормальную.<br><br>Кстати, уверен, что компилятор в этом месте даже предупреждения не выдает?]]></description>
        <author>amk</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=331768&amp;view=findpost&amp;p=2894770</guid>
        <pubDate>Mon, 16 May 2011 05:05:47 +0000</pubDate>
        <title>Экспорт функции из dll</title>
        <link>https://forum.sources.ru/index.php?showtopic=331768&amp;view=findpost&amp;p=2894770</link>
        <description><![CDATA[volod: Большое спасибо&#33; В варианте <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">//h-файл</div><div class="code_line">extern &quot;C&quot; __declspec(dllexport) IUnknown* CreateInstance(void);</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
все заработало.. <br>
<br>
Можно еще небольшой вопрос, который меня смущает?<br>
В h-файле у меня у меня лежит полное объяление фции - т.е. и с extern &quot;C&quot;, и с __declspec(dllexport). А в cpp-файле определить функцию можно двумя способами:<br>
<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">extern &quot;C&quot; __declspec(dllexport) IUnknown* CreateInstance(void){/* код фции */}; &nbsp; &nbsp;//так</div><div class="code_line">IUnknown* CreateInstance(void){/* код фции */}; &nbsp; &nbsp;//или так..</div></ol></div></div></div></div><br>
В общем-то, как я понял, компилятор считает оба определения корректными и принимет за одну функцию.. но какой вариант написания будет более правильным?]]></description>
        <author>volod</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=331768&amp;view=findpost&amp;p=2894765</guid>
        <pubDate>Mon, 16 May 2011 04:45:09 +0000</pubDate>
        <title>Экспорт функции из dll</title>
        <link>https://forum.sources.ru/index.php?showtopic=331768&amp;view=findpost&amp;p=2894765</link>
        <description><![CDATA[trainer: Перенеси __declspec в начало декларации функции. <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;'>Добавлено <time class="tag-mergetime" datetime="2011-05-16T04:46:49+00:00">16.05.11, 04:46</time></span></span><br>
И добавь void в список параметров. Иначе внезапно получишь декларацию переменной.]]></description>
        <author>trainer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=331768&amp;view=findpost&amp;p=2894761</guid>
        <pubDate>Mon, 16 May 2011 04:25:15 +0000</pubDate>
        <title>Экспорт функции из dll</title>
        <link>https://forum.sources.ru/index.php?showtopic=331768&amp;view=findpost&amp;p=2894761</link>
        <description><![CDATA[volod: Мне нужно создать dll и в ней одну функцию экспортировать. не получается.. и не пойму в чем дело. <br>
Приведу простейший пример:<br>
<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">//h-файл</div><div class="code_line">int* __declspec(dllexport) function();</div><div class="code_line">&nbsp;</div><div class="code_line">//cpp-файл</div><div class="code_line">int* function()</div><div class="code_line">{</div><div class="code_line">static int var=5;</div><div class="code_line">return &var;</div><div class="code_line">}</div></ol></div></div></div></div><br>
На этот код компилятор ругается &quot;error C2059: syntax error : &#39;__declspec(dllexport)&#39;&quot; Почему?<br>
<br>
ЗЫ: на всякий случай - в реале, конечно, используется не эта функция, а посложнее:<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">extern &quot;C&quot; IUnknown* __declspec(dllexport) CreateInstance()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;IUnknown* pI = static_cast&#60;IX*&#62;(new CA) ;</div><div class="code_line">&nbsp;&nbsp; &nbsp;pI-&#62;AddRef() ;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return pI ;</div><div class="code_line">}</div></ol></div></div></div></div><br>
В двух словах - надо в DLL расположить COM-компонент и через эту экспортируемую функцию вернуть указатель на стандарный интерфейс, чтобы в дальнейшем с ним работать.. впрочем сути это не меняет и компилятор выдает ту-же ошибку, ругаясь на возвращаемый указатель.]]></description>
        <author>volod</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	