<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="C#动态地调用Win32 DLL中导出的函数_C/C++和C#中的数据类型的对应表" id="card1">
<p> 游客</p><p>
标题:C#动态地调用Win32 DLL中导出的函数_C/C++和C#中的数据类型的对应表<br/>
正文:<br/>
关于这种C#中调用Win32 DLL中导出的函数的方法有很多种了，本文做个小结。大致有两种情况：编译时已知DLL文件名和函数名运行时才能获知DLL文件名（函数名）编译时已知DLL文件名这种情况下可以简单的使用Pinvoke机制，使用DllImport如：[System.Runtime.InteropServices.DllImport(&amp;quot;kernel32.dll&amp;quot;)]public static extern bool Beep(uint freq,uint time);运行时才能获知DLL文件名有两种解决方案：首先，可以想到使用Win32 API中LoadLibrary和GetProcAddress，象在C/C++中一样来动态调用DLL中函数，这里就不细说了；其次，考虑如何才能动态使用DllImport, 很容易想到使用.Net中的反射（Reflection&amp;amp;Emit）来动态生成一个Pinvoke函数，如下例：　　　　代码 1  /// &amp;lt;summary&amp;gt; 2         /// 获取DLL中函数 3         /// &amp;lt;/summary&amp;gt; 4         /// &amp;lt;param name=&amp;quot;dllName&amp;quot;&amp;gt;DLL文件的名字（路径），如果在PATH环境变量下或当期目录中则可以直接指定DLL的名字，否则应包括其路径信息&amp;lt;/param&amp;gt; 5         /// &amp;lt;param name=&amp;quot;methodName&amp;quot;&amp;gt;函数名字&amp;lt;/param&amp;gt; 6         /// &amp;lt;param name=&amp;quot;returnType&amp;quot;&amp;gt;返回类型&amp;<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=246&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=246&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=246&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=246&amp;Page=3">[3]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=246&amp;Page=5">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=246">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=246">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>