⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 在存储过程中调用外部的动态连接库.htm

📁 我在网上收集的一些有关vcDLL编程的文章。
💻 HTM
📖 第 1 页 / 共 2 页
字号:
  lang=EN-US>SQL-Server #include <br>
  <br>
  <br>
  #include</span><span class=GramE>            </span><span lang=EN-US>//</span>要加入这个<span
  lang=EN-US>.h</span>文件<span lang=EN-US> <br>
  <br>
  #define XP_NOERROR</span>  <span class=GramE> </span><span lang=EN-US>0 <br>
  #define XP_ERROR</span><span class=GramE>    </span><span lang=EN-US>1 <br>
  <br>
  #<span class=SpellE>ifndef</span> _DEBUG <br>
  #define _DEBUG <br>
  #<span class=SpellE>endif</span> <br>
  <br>
  char <span class=SpellE>szFileName</span>[MAX_PATH 1]; <br>
  <br>
  void <span class=SpellE>WriteInfo</span></span>(<span lang=EN-US>const char *
  <span class=SpellE>str</span></span>)<span lang=EN-US>; <br>
  <br>
  extern &quot;C&quot; SRVRETCODE WINAPI <span class=SpellE>SetFileName</span></span>(<span
  lang=EN-US>SRV_PROC* <span class=SpellE>pSrvProc</span></span>)<span
  lang=EN-US> <br>
  { <br>
  </span><span class=GramE>    </span><span class=SpellE><span lang=EN-US>WriteInfo</span></span>(<span
  lang=EN-US>&quot;<span class=SpellE>SetFileName</span> start&quot;</span>)<span
  lang=EN-US>; <br>
  </span>    <span class=SpellE><span lang=EN-US>int</span></span><span
  lang=EN-US> <span class=SpellE>paramCount</span> = <span class=SpellE>srv_rpcparams</span></span>(<span
  class=SpellE><span lang=EN-US>pSrvProc</span></span>)<span lang=EN-US>; <br>
  </span>    <span lang=EN-US>if </span>(<span class=SpellE><span lang=EN-US>paramCount</span></span><span
  lang=EN-US> != 1</span>)<span lang=EN-US>{ <br>
  </span><span class=GramE>        </span><span class=SpellE><span lang=EN-US>WriteInfo</span></span>(<span
  lang=EN-US>&quot;<span class=SpellE>Param</span> Err start&quot;</span>)<span
  lang=EN-US>; <br>
  </span><span class=GramE>        </span><span lang=EN-US>return XP_ERROR; <br>
  </span>  <span class=GramE>  </span><span lang=EN-US>} <br>
  <br>
  </span><span class=GramE>    </span><span lang=EN-US>BYTE</span><span
  class=GramE>      </span><span class=SpellE><span lang=EN-US>bType</span></span><span
  lang=EN-US>; <br>
  </span>    <span lang=EN-US>unsigned long</span> <span lang=EN-US> <span
  class=SpellE>cbMaxLen</span>; <br>
  </span>    <span lang=EN-US>unsigned long</span> <span lang=EN-US> <span
  class=SpellE>cbActualLen</span>; <br>
  </span>    <span lang=EN-US>BOOL</span><span class=GramE>      </span><span
  class=SpellE><span lang=EN-US>fNull</span></span><span lang=EN-US>; <br>
  <br>
  </span>    <span class=SpellE><span lang=EN-US>int</span></span><span
  lang=EN-US> ret = <span class=SpellE>srv_paraminfo</span></span>(<span
  class=SpellE><span lang=EN-US>pSrvProc</span></span><span lang=EN-US>, 1,
  &amp;<span class=SpellE>bType</span>, &amp;<span class=SpellE>cbMaxLen</span>,
  &amp;<span class=SpellE>cbActualLen</span>, <br>
  </span><span class=GramE>            </span><span lang=EN-US>NULL, &amp;<span
  class=SpellE>fNull</span></span>)<span lang=EN-US>; <br>
  </span>    <span lang=EN-US>if </span>(<span class=SpellE><span lang=EN-US>cbActualLen</span></span>)<span
  lang=EN-US>{ <br>
  </span><span class=GramE>        </span><span class=SpellE><span lang=EN-US>ZeroMemory</span></span>(<span
  class=SpellE><span lang=EN-US>szFileName</span></span><span lang=EN-US>,
  MAX_PATH 1</span>)<span lang=EN-US>; <br>
  </span><span class=GramE>        </span><span class=SpellE><span lang=EN-US>memcpy</span></span>(<span
  class=SpellE><span lang=EN-US>szFileName</span></span><span lang=EN-US>, <span
  class=SpellE>srv_paramdata</span></span>(<span class=SpellE><span lang=EN-US>pSrvProc</span></span><span
  lang=EN-US>, 1</span>)<span lang=EN-US>, <span class=SpellE>cbActualLen</span></span>)<span
  lang=EN-US>; <br>
  </span><span class=GramE>        </span><span class=SpellE><span lang=EN-US>WriteInfo</span></span>(<span
  lang=EN-US>&quot;Set filename ok&quot;</span>)<span lang=EN-US>; <br>
  </span><span class=GramE>        </span><span lang=EN-US>return </span>(<span
  lang=EN-US>XP_NOERROR</span>)<span lang=EN-US>; <br>
  </span>  <span class=GramE>  </span><span lang=EN-US>} <br>
  </span><span class=GramE>    </span><span lang=EN-US>else { <br>
  </span><span class=GramE>        </span><span class=SpellE><span lang=EN-US>WriteInfo</span></span>(<span
  lang=EN-US>&quot;Set filename <span class=SpellE>param</span> failed&quot;</span>)<span
  lang=EN-US>; <br>
  </span><span class=GramE>        </span><span lang=EN-US>return XP_ERROR; <br>
  </span>  <span class=GramE>  </span><span lang=EN-US>} <br>
  } <br>
  <br>
  extern &quot;C&quot; SRVRETCODE WINAPI <span class=SpellE>addLine</span></span>(<span
  lang=EN-US>SRV_PROC* <span class=SpellE>pSrvProc</span></span>)<span
  lang=EN-US> <br>
  { <br>
  </span><span class=GramE>    </span><span class=SpellE><span lang=EN-US>WriteInfo</span></span>(<span
  lang=EN-US>&quot;<span class=SpellE>addline</span> start&quot;</span>)<span
  lang=EN-US>; <br>
  </span><span class=GramE>    </span><span class=SpellE><span lang=EN-US>int</span></span><span
  lang=EN-US> <span class=SpellE>paramCount</span> = <span class=SpellE>srv_rpcparams</span></span>(<span
  class=SpellE><span lang=EN-US>pSrvProc</span></span>)<span lang=EN-US>; <br>
  </span><span class=GramE>    </span><span lang=EN-US>if </span>(<span
  class=SpellE><span lang=EN-US>paramCount</span></span><span lang=EN-US> != 1</span>)<span
  lang=EN-US>{ <br>
  </span><span class=GramE>        </span><span class=SpellE><span lang=EN-US>WriteInfo</span></span>(<span
  lang=EN-US>&quot;<span class=SpellE>addline</span> <span class=SpellE>param</span>
  err&quot;</span>)<span lang=EN-US>; <br>
  </span><span class=GramE>        </span><span lang=EN-US>return XP_ERROR; <br>
  </span>  <span class=GramE>  </span><span lang=EN-US>} <br>
  <br>
  </span><span class=GramE>    </span><span lang=EN-US>BYTE</span><span
  class=GramE>      </span><span class=SpellE><span lang=EN-US>bType</span></span><span
  lang=EN-US>; <br>
  </span><span class=GramE>    </span><span lang=EN-US>unsigned long</span>  <span
  class=SpellE><span lang=EN-US>cbMaxLen</span></span><span lang=EN-US>; <br>
  </span><span class=GramE>    </span><span lang=EN-US>unsigned long</span>  <span
  class=SpellE><span lang=EN-US>cbActualLen</span></span><span lang=EN-US>; <br>
  </span><span class=GramE>    </span><span lang=EN-US>BOOL</span><span
  class=GramE>      </span><span class=SpellE><span lang=EN-US>fNull</span></span><span
  lang=EN-US>; <br>
  </span><span class=GramE>    </span><span class=SpellE><span lang=EN-US>bool</span></span><span
  class=GramE>      </span><span class=SpellE><span lang=EN-US>rt</span></span><span
  lang=EN-US> = false; <br>
  <br>
  </span><span class=GramE>    </span><span class=SpellE><span lang=EN-US>int</span></span><span
  lang=EN-US> ret = <span class=SpellE>srv_paraminfo</span></span>(<span
  class=SpellE><span lang=EN-US>pSrvProc</span></span><span lang=EN-US>, 1,
  &amp;<span class=SpellE>bType</span>, &amp;<span class=SpellE>cbMaxLen</span>,
  &amp;<span class=SpellE>cbActualLen</span>, <br>
  </span>            <span lang=EN-US>NULL, &amp;<span class=SpellE>fNull</span></span>)<span
  lang=EN-US>; <br>
  <br>
  </span>    <span lang=EN-US>if </span>(<span class=SpellE><span lang=EN-US>cbActualLen</span></span>)<span
  lang=EN-US>{ <br>
  </span>        <span class=SpellE><span lang=EN-US>int</span></span><span
  lang=EN-US> n; <br>
  </span>        <span lang=EN-US>char <span class=SpellE>srt</span>[3] =
  {0x0d, 0x<st1:chmetcnv UnitName="a" SourceValue="0" HasSpace="False"
  Negative="False" NumberType="1" TCSC="0" w:st="on">0a</st1:chmetcnv>, 0}; <br>
  <br>
  </span>        <span lang=EN-US>char * c = new char[<span class=SpellE>cbActualLen</span>
  3]; <br>
  </span>        <span lang=EN-US>if </span>(<span lang=EN-US>!c</span>)<span
  lang=EN-US>return XP_ERROR; <br>
  <br>
  </span>        <span class=SpellE><span lang=EN-US>ZeroMemory</span></span>(<span
  lang=EN-US>c, <span class=SpellE>cbActualLen</span> 3</span>)<span
  lang=EN-US>; <br>
  </span>        <span class=SpellE><span lang=EN-US>memcpy</span></span>(<span
  lang=EN-US>c, <span class=SpellE>srv_paramdata</span></span>(<span
  class=SpellE><span lang=EN-US>pSrvProc</span></span><span lang=EN-US>, 1</span>)<span
  lang=EN-US>, <span class=SpellE>cbActualLen</span></span>)<span lang=EN-US>; <br>
  </span>        <span class=SpellE><span lang=EN-US>memcpy</span></span>(<span
  lang=EN-US>c <span class=SpellE>cbActualLen</span>, <span class=SpellE>srt</span>,
  3</span>)<span lang=EN-US>; <br>
  <br>
  </span>        <span lang=EN-US>HANDLE <span class=SpellE>hf</span> = <span
  class=SpellE>CreateFile</span></span>(<span class=SpellE><span lang=EN-US>szFileName</span></span><span
  lang=EN-US>, GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, <br>
  </span>                 <span lang=EN-US>OPEN_ALWAYS, 0, NULL</span>)<span
  lang=EN-US>; <br>
  </span>        <span lang=EN-US>if </span>(<span class=SpellE><span
  lang=EN-US>hf</span></span><span lang=EN-US> == INVALID_HANDLE_VALUE</span>)<span
  lang=EN-US>{ <br>
  </span>            <span class=SpellE><span lang=EN-US>WriteInfo</span></span>(<span
  lang=EN-US>&quot;<span class=SpellE>addline</span> create file err &quot;</span>)<span
  lang=EN-US>; <br>
  </span>            <span lang=EN-US>delete []c; <br>
  </span>            <span lang=EN-US>return XP_ERROR; <br>
  </span>        <span lang=EN-US>} <br>
  <br>
  </span>        <span class=SpellE><span lang=EN-US>WriteInfo</span></span>(<span
  lang=EN-US>&quot;<span class=SpellE>addline</span> create file ok &quot;</span>)<span
  lang=EN-US>; <br>
  </span>        <span lang=EN-US>DWORD <span class=SpellE>dwWt</span>; <br>
  </span>        <span lang=EN-US>n = <span class=SpellE>strlen</span></span>(<span
  lang=EN-US>c</span>)<span lang=EN-US>; <br>
  </span>        <span class=SpellE><span lang=EN-US>SetFilePointer</span></span>(<span
  class=SpellE><span lang=EN-US>hf</span></span><span lang=EN-US>, 0, NULL,
  FILE_END</span>)<span lang=EN-US>; <br>
  </span>        <span lang=EN-US>if </span>(<span class=SpellE><span
  lang=EN-US>WriteFile</span></span>(<span class=SpellE><span lang=EN-US>hf</span></span><span
  lang=EN-US>, c, n, &amp;<span class=SpellE>dwWt</span>, NULL</span>)<span
  lang=EN-US> &amp;&amp; <span class=SpellE>dwWt</span> == n</span>)<span
  lang=EN-US> <br>
  </span>        <span lang=EN-US>{ <br>
  </span>            <span class=SpellE><span lang=EN-US>WriteInfo</span></span>(<span
  lang=EN-US>&quot;<span class=SpellE>addline</span> write file ok &quot;</span>)<span
  lang=EN-US>; <br>
  </span>            <span class=SpellE><span lang=EN-US>rt</span></span><span
  lang=EN-US> = true; <br>
  </span>        <span lang=EN-US>} <br>
  </span>        <span lang=EN-US>delete []c; <br>
  </span>        <span class=SpellE><span lang=EN-US>CloseHandle</span></span>(<span
  class=SpellE><span lang=EN-US>hf</span></span>)<span lang=EN-US>; <br>
  </span>    <span lang=EN-US>} <br>
  </span>    <span lang=EN-US>return <span class=SpellE>rt</span> ?
  XP_NOERROR:XP_ERROR; <br>
  } <br>
  <br>
  inline void <span class=SpellE>WriteInfo</span></span>(<span lang=EN-US>const
  char * <span class=SpellE>str</span></span>)<span lang=EN-US>{ <br>
  #<span class=SpellE>ifdef</span> _DEBUG <br>
  </span>    <span lang=EN-US>char <span class=SpellE>srt</span>[3] = {0x0d, 0x<st1:chmetcnv
  UnitName="a" SourceValue="0" HasSpace="False" Negative="False" NumberType="1"
  TCSC="0" w:st="on">0a</st1:chmetcnv>, 0}; <br>
  </span>    <span lang=EN-US>HANDLE <span class=SpellE>hf</span> = <span
  class=SpellE>CreateFile</span></span>(<span lang=EN-US>&quot;c:\\storeproc.log&quot;,
  GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, <br>
  </span>                 <span lang=EN-US>OPEN_ALWAYS, 0, NULL</span>)<span
  lang=EN-US>; <br>
  </span>    <span lang=EN-US>if </span>(<span class=SpellE><span lang=EN-US>hf</span></span><span
  lang=EN-US> != INVALID_HANDLE_VALUE</span>)<span lang=EN-US>{ <br>
  </span>        <span class=SpellE><span lang=EN-US>SetFilePointer</span></span>(<span
  class=SpellE><span lang=EN-US>hf</span></span><span lang=EN-US>, 0, NULL,
  FILE_END</span>)<span lang=EN-US>; <br>
  </span>        <span lang=EN-US>DWORD <span class=SpellE>dwWt</span>; <br>
  </span>        <span class=SpellE><span lang=EN-US>WriteFile</span></span>(<span
  class=SpellE><span lang=EN-US>hf</span></span><span lang=EN-US>, <span
  class=SpellE>str</span>, <span class=SpellE>strlen</span></span>(<span
  class=SpellE><span lang=EN-US>str</span></span>)<span lang=EN-US>, &amp;<span
  class=SpellE>dwWt</span>, NULL</span>)<span lang=EN-US>; <br>
  </span>        <span class=SpellE><span lang=EN-US>WriteFile</span></span>(<span
  class=SpellE><span lang=EN-US>hf</span></span><span lang=EN-US>, <span
  class=SpellE>srt</span>, <span class=SpellE>strlen</span></span>(<span
  class=SpellE><span lang=EN-US>srt</span></span>)<span lang=EN-US>, &amp;<span
  class=SpellE>dwWt</span>, NULL</span>)<span lang=EN-US>; <br>
  </span>        <span class=SpellE><span lang=EN-US>CloseHandle</span></span>(<span
  class=SpellE><span lang=EN-US>hf</span></span>)<span lang=EN-US>; <br>
  </span>    <span lang=EN-US>} <br>
  </span>    <span lang=EN-US>else { <br>
  </span>        <span class=SpellE><span lang=EN-US>MessageBox</span></span>(<span
  lang=EN-US>NULL, &quot;Write info err&quot;, &quot;Message&quot;,
  MB_OK|MB_ICONINFORMATION</span>)<span lang=EN-US>; <br>
  </span>    <span lang=EN-US>} <br>
  </span>    <span lang=EN-US>#<span class=SpellE>endif</span> <br>
  } <br>
  <br>
  BOOL WINAPI <span class=SpellE>DllMain</span></span>(<span lang=EN-US>HINSTANCE
  <span class=SpellE>hinstDLL,DWORD</span> <span class=SpellE>fdwReason,LPVOID</span>
  <span class=SpellE>lpReserved</span></span>)<span lang=EN-US> <br>
  { <br>
  </span>    <span lang=EN-US>return TRUE; <br>
  } <br>
  <br>
  <br>
  </span>  编译完成后,把动态链接库放到<span lang=EN-US>WINNT/System32</span>目录下<span
  lang=EN-US>,</span>启动<span lang=EN-US>SQL Server</span>。我们可以打开<span
  lang=EN-US>SQL Server Query Analyzer</span>调用存储过程<span class=SpellE><span
  lang=EN-US>sp_testdll</span></span>以测试其运行是否正确。<span lang=EN-US> <br>
  <br>
  </span>  具体可参考<span lang=EN-US>SQL-Server</span>的在线帮助。<span lang=EN-US> <br>
  </span>  笔者环境:<span lang=EN-US>win2000 professional SQL-Server7.0</span>(<span
  lang=EN-US>2000</span>也可)<span lang=EN-US> <br>
  </span>  <span lang=EN-US>VC6.0 SP5 Platform SDK 20001.8 <br>
  <br>
  </span>  <span lang=EN-US>VC</span>知识库测试环境:<span lang=EN-US>win2000
  professional SQL-Server 7.0 VC.Net<o:p></o:p></span></span></p>
  </td>
  <td style='padding:0cm 0cm 0cm 0cm'>
  <p class=MsoNormal align=left style='text-align:left;mso-pagination:widow-orphan'><span
  lang=EN-US style='font-size:10.0pt;mso-font-kerning:0pt'><o:p>&nbsp;</o:p></span></p>
  </td>
  <td style='padding:0cm 0cm 0cm 0cm'>
  <p class=MsoNormal align=left style='text-align:left;mso-pagination:widow-orphan'><span
  lang=EN-US style='font-size:10.0pt;mso-font-kerning:0pt'><o:p>&nbsp;</o:p></span></p>
  </td>
 </tr>
</table>

</div>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

</div>

</body>

</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -