<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_春夏秋冬</title><subtitle type="text">chuncn</subtitle><id>http://feed.cnblogs.com/blog/u/27538/rss</id><updated>2012-01-28T15:40:19Z</updated><author><name>chuncn</name><uri>http://www.cnblogs.com/chuncn/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chuncn/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/27538/rss"/><entry><id>http://www.cnblogs.com/chuncn/archive/2012/01/16/2323986.html</id><title type="text">Silverlight桌面部署器及其使用</title><summary type="text">一、文件简介SL.ini 配置文件InstallSL.exe 安装Silveright应用至桌面RunSL.exe 运行Silverligh应用，无安装UnInstallSL.exe 卸载Silverlight应用二、配置文件说明SL.ini文件内容如下：[SL] App=App.xap Url=http://112.8.33.25:99/ClientBin/App.xap 其中App.xap文件应该放在当前路径下，Url为应用主程序在Web上的地址，可以位于Windows、Linux、 Mac等系统之上，且http://112.8.33.25:99/ClientBin/下允许有子模型、子应.</summary><published>2012-01-16T10:00:00Z</published><updated>2012-01-16T10:00:00Z</updated><author><name>chuncn</name><uri>http://www.cnblogs.com/chuncn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chuncn/archive/2012/01/16/2323986.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chuncn/archive/2012/01/16/2323986.html"/><content type="html">&lt;p&gt;一、文件简介&lt;/p&gt;&#xD;
&lt;p&gt;SL.ini&amp;nbsp;&amp;nbsp; 配置文件&lt;/p&gt;&#xD;
&lt;p&gt;InstallSL.exe&amp;nbsp; 安装Silveright应用至桌面&lt;/p&gt;&#xD;
&lt;p&gt;RunSL.exe&amp;nbsp; 运行Silverligh应用，无安装&lt;/p&gt;&#xD;
&lt;p&gt;UnInstallSL.exe&amp;nbsp; 卸载Silverlight应用&lt;/p&gt;&#xD;
&lt;p&gt;二、配置文件说明&lt;/p&gt;&#xD;
&lt;p&gt;SL.ini文件内容如下：&lt;/p&gt;&#xD;
&lt;p&gt;[SL]&lt;br /&gt; App=App.xap&lt;br /&gt; Url=http://112.8.33.25:99/ClientBin/App.xap&lt;/p&gt;&#xD;
&lt;p&gt;其中App.xap文件应该放在当前路径下，Url为应用主程序在Web上的地址，可以位于Windows、Linux、 Mac等系统之上，且&lt;a href="http://112.8.33.25:99/ClientBin/"&gt;http://112.8.33.25:99/ClientBin/&lt;/a&gt;下允许有子模型、子应用。&lt;/p&gt;&#xD;
&lt;p&gt;三、使用方法&lt;/p&gt;&#xD;
&lt;p&gt;将App.xap（默认）复制到当前文件夹，并安装相应的Silverlight运行时(已有的版本有SL3、SL4、SL5 ，另外有mac版)，然后按上一节进行配置。&lt;/p&gt;&#xD;
&lt;p&gt;最后，若要安装至桌面则执行InstallSL.exe；若要无安装方式下直接运行该应用则执行RunSL.exe；若要卸载当前 配置的应用则执行UnInstallSL.exe。&lt;/p&gt;&#xD;
&lt;p&gt;注：Silverlight本质上是winform的升级版本，也是wpf的子集，但其本身并不像winform/wpf那样方便的直接运行和部署，故此，本文提供的工具旨在解决该问题。&lt;/p&gt;&#xD;
&lt;p&gt;注：本程序在windows server 2003且无.net的环境下测试通过，需要安装silverlight运行时。&lt;/p&gt;&#xD;
&lt;p&gt;注：本文程序为绿色的win32程序，可使用installshield等软件打包成安装文件包。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下载地址：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://files.cnblogs.com/chuncn/RunSLInDesktop.zip"&gt;http://files.cnblogs.com/chuncn/RunSLInDesktop.zip&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chuncn/aggbug/2323986.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chuncn/archive/2012/01/16/2323986.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chuncn/articles/2323982.html</id><title type="text">Silverlight桌面部署器的使用</title><summary type="text">一、文件简介SL.ini配置文件InstallSL.exe安装Silveright应用至桌面RunSL.exe运行Silverligh应用，无安装 UnInstallSL.exe卸载Silverlight应用二、配置文件说明SL.ini文件内容如下：[SL]App=App.xapUrl=http://112.8.33.25:99/ClientBin/App.xap 其中App.xap文件应该放在当前路径下，Url为应用主程序在Web上的地址，可以位于Windows、Linux、 Mac等系统之上，且http://112.8.33.25:99/ClientBin/下允许有子模型、子应用。三、使.</summary><published>2012-01-16T09:58:00Z</published><updated>2012-01-16T09:58:00Z</updated><author><name>chuncn</name><uri>http://www.cnblogs.com/chuncn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chuncn/articles/2323982.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chuncn/articles/2323982.html"/><content type="html">&lt;p&gt;一、文件简介&lt;/p&gt;&#xD;
&lt;p&gt;SL.ini&amp;nbsp;&amp;nbsp;&amp;nbsp;配置文件&lt;/p&gt;&#xD;
&lt;p&gt;InstallSL.exe&amp;nbsp;&amp;nbsp;安装Silveright应用至桌面&lt;/p&gt;&#xD;
&lt;p&gt;RunSL.exe&amp;nbsp;&amp;nbsp;运行Silverligh应用，无安装 UnInstallSL.exe&amp;nbsp;&amp;nbsp;卸载Silverlight应用&lt;/p&gt;&#xD;
&lt;p&gt;二、配置文件说明&lt;/p&gt;&#xD;
&lt;p&gt;SL.ini文件内容如下：&lt;/p&gt;&#xD;
&lt;p&gt;[SL]&lt;br /&gt;&amp;nbsp;App=App.xap&lt;br /&gt;&amp;nbsp;Url=http://112.8.33.25:99/ClientBin/App.xap&lt;/p&gt;&#xD;
&lt;p&gt;其中App.xap文件应该放在当前路径下，Url为应用主程序在Web上的地址，可以位于Windows、Linux、 Mac等系统之上，且&lt;a href="http://112.8.33.25:99/ClientBin/"&gt;http://112.8.33.25:99/ClientBin/&lt;/a&gt;下允许有子模型、子应用。&lt;/p&gt;&#xD;
&lt;p&gt;三、使用方法&lt;/p&gt;&#xD;
&lt;p&gt;将App.xap（默认）复制到当前文件夹，并安装相应的Silverlight运行时(已有的版本有SL3、SL4、SL5 ，另外有mac版)，然后按上一节进行配置。&lt;/p&gt;&#xD;
&lt;p&gt;最后，若要安装至桌面则执行InstallSL.exe；若要无安装方式下直接运行该应用则执行RunSL.exe；若要卸载当前 配置的应用则执行UnInstallSL.exe。&lt;/p&gt;&#xD;
&lt;p&gt;注：Silverlight本质上是winform的升级版本，也是wpf的子集，但其本身并不像winform/wpf那样方便的直接运行和部署，故此，本文提供的工具旨在解决该问题。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chuncn/aggbug/2323982.html?type=2" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chuncn/articles/2323982.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chuncn/archive/2012/01/06/2314020.html</id><title type="text">Silverlight5通过P/Invoke调用自定义win32 DLL(Lua)</title><summary type="text">上一篇《Silverlight5通过P/Invoke调用系统win32的三个示例》展示了silverlight5通过P/Invoke调用系统win32的三个示例，本篇给出自定义win32 dll及其在Silverlight5中调用的代码。 注1：为了确保silverilght5在浏览器或桌面上成功调用win32 DLL，必须在项目属性中勾选相应的权限： 勾选Enable running application out of the browser及其Require elevated trust when running in-browser 勾选Require elevate...</summary><published>2012-01-06T02:23:00Z</published><updated>2012-01-06T02:23:00Z</updated><author><name>chuncn</name><uri>http://www.cnblogs.com/chuncn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chuncn/archive/2012/01/06/2314020.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chuncn/archive/2012/01/06/2314020.html"/><content type="html">&lt;p&gt;上一篇《&lt;a id="homepage1_HomePageDays_DaysList_DayItem_1_DayList_1_TitleUrl_0" href="http://www.cnblogs.com/chuncn/archive/2011/12/30/2307613.html"&gt;Silverlight5通过P/Invoke调用系统win32的三个示例&lt;/a&gt;》展示了silverlight5通过P/Invoke调用系统win32的三个示例，本篇给出自定义win32 dll及其在Silverlight5中调用的代码。&lt;/p&gt;&#xD;
&lt;p&gt;注1：为了确保silverilght5在浏览器或桌面上成功调用win32 DLL，必须在项目属性中勾选相应的权限：&lt;/p&gt;&#xD;
&lt;p&gt;勾选Enable running application out of the browser及其Require elevated trust when running in-browser&lt;/p&gt;&#xD;
&lt;p&gt;勾选Require elevated trust when running in-browser&lt;/p&gt;&#xD;
&lt;p&gt;注2：win32 dll文件编译后放在\windows\system32或\windows\system目录下，win7 x64的系统放在后者。&lt;/p&gt;&#xD;
&lt;p&gt;注3：winform/wpf中调用类似&lt;/p&gt;&#xD;
&lt;p&gt;.h&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;// The following ifdef block is the standard way of creating macros which make exporting &#xD;
// from a DLL simpler. All files within this DLL are compiled with the MYDLL_EXPORTS&#xD;
// symbol defined on the command line. This symbol should not be defined on any project&#xD;
// that uses this DLL. This way any other project whose source files include this file see &#xD;
// MYDLL_API functions as being imported from a DLL, whereas this DLL sees symbols&#xD;
// defined with this macro as being exported.&#xD;
#ifdef MYDLL_EXPORTS&#xD;
#define MYDLL_API __declspec(dllexport)&#xD;
#else&#xD;
#define MYDLL_API __declspec(dllimport)&#xD;
#endif&#xD;
&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="color: blue;"&gt;struct&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;HHFC_SET&lt;/span&gt; &lt;br /&gt;{&lt;br /&gt; 	;&lt;span style="color: blue;"&gt;char&lt;/span&gt;*&amp;nbsp;&lt;span style="color: navy;"&gt;UID&lt;/span&gt;;&lt;br /&gt;&amp;nbsp; 	&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: navy;"&gt;code&lt;/span&gt;;&lt;br /&gt;};&lt;/pre&gt;&#xD;
&lt;pre &gt;// This class is exported from the MyDLL.dll&#xD;
class MYDLL_API CMyDLL {&#xD;
public:&#xD;
	CMyDLL(void);&#xD;
	// TODO: add your methods here.&#xD;
};&#xD;
//extern MYDLL_API int nMyDLL;&#xD;
extern "C" MYDLL_API int nMyDLL; &#xD;
extern "C" MYDLL_API float fnMyDLL(float x ,float y);// 注意得加上extern&amp;nbsp; "C"，否则无法P/Invoke&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;.cpp&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;#include "stdafx.h"&#xD;
#include "MyDLL.h"&#xD;
&lt;/pre&gt;&#xD;
&lt;pre&gt;#include &amp;lt;iostream&amp;gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;#include "LuaPlus.h" &lt;br /&gt;#include "LuaPlusHelper.h" &lt;br /&gt;#pragma comment(lib,"LuaPlusLib.lib")&amp;nbsp;&amp;nbsp; &lt;br /&gt;using namespace LuaPlus; &lt;br /&gt;using namespace std;&lt;/pre&gt;&#xD;
&lt;pre &gt;// This is an example of an exported variable&#xD;
MYDLL_API int nMyDLL=0;&#xD;
// This is an example of an exported function. &#xD;
MYDLL_API int fnMyDLL(float x ,float y)&#xD;
{&#xD;
 　　 //调用Lua脚本并计算&#xD;
　　  string str;&#xD;
　　  str.append("function Add(x, y)\n");&#xD;
　　  str.append(" return x*y;\n");&#xD;
　　  str.append("end\n");&#xD;
　　  int iret = state-&amp;gt;DoString(str.c_str());// state-&amp;gt;DoFile("a.lua");&#xD;
　　  LuaFunction Add = state-&amp;gt;GetGlobal("Add");&#xD;
　　  float myret = Add(x,y);&#xD;
　　  return myret;&#xD;
} &#xD;
extern "C" __declspec(dllexport)  int WINAPI add()&#xD;
{&#xD;
	return 101;&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="color: blue;"&gt;extern&lt;/span&gt;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"C"&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;__declspec&lt;/span&gt;(&lt;span style="color: blue;"&gt;dllexport&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style="color: #a000a0;"&gt;WINAPI&lt;/span&gt;&amp;nbsp;&lt;span style="color: #880000;"&gt;add2&lt;/span&gt;(&lt;span style="color: blue;"&gt;HHFC_SET&lt;/span&gt;*&amp;nbsp;&lt;span style="color: navy;"&gt;stru&lt;/span&gt;&amp;nbsp;)&lt;br /&gt; {&lt;br /&gt; 	&lt;span style="color: navy;"&gt;stru&lt;/span&gt;-&amp;gt;&lt;span style="color: navy;"&gt;UID&lt;/span&gt;=&lt;span style="color: #a31515;"&gt;"this is a win32 test about struct"&lt;/span&gt;;&lt;br /&gt; 	&lt;span style="color: navy;"&gt;stru&lt;/span&gt;-&amp;gt;&lt;span style="color: navy;"&gt;code&lt;/span&gt;=3;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 	&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;1;&lt;br /&gt; }&lt;/pre&gt;&#xD;
&lt;pre &gt;// This is the constructor of a class that has been exported.&#xD;
// see MyDLL.h for the class definition&#xD;
CMyDLL::CMyDLL()&#xD;
{&#xD;
	return;&#xD;
}&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;.xaml&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;Grid x:Name="LayoutRoot" Background="White"&amp;gt;&#xD;
&#xD;
        &amp;lt;StackPanel Orientation="Horizontal" VerticalAlignment="Top" Margin="24,24,0,0"&amp;gt;&#xD;
            &amp;lt;TextBlock Name="textBlock1" Text="add       函数结果:" Height="23" /&amp;gt;&#xD;
            &amp;lt;TextBox Name="textBox1" Width="120" Height="23" /&amp;gt;&#xD;
        &amp;lt;/StackPanel&amp;gt;&#xD;
&#xD;
        &amp;lt;StackPanel Orientation="Horizontal" VerticalAlignment="Top" Margin="24,64,0,0"&amp;gt;&#xD;
            &amp;lt;TextBlock Name="textBlock2" Text="fnMyDLL函数结果:" Height="23"/&amp;gt;&#xD;
            &amp;lt;TextBox Name="textBox2" VerticalAlignment="Top" Width="120" Height="23"/&amp;gt;&#xD;
        &amp;lt;/StackPanel&amp;gt;&#xD;
       &#xD;
&#xD;
        &amp;lt;Button Content="Button" Height="32" Margin="120,101,202,0" Name="button1" VerticalAlignment="Top" Width="78" Click="button1_Click" /&amp;gt;&#xD;
    &amp;lt;/Grid&amp;gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;.cs&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;public partial class MainPage : UserControl&#xD;
    {&#xD;
        [DllImportAttribute("user32.dll", EntryPoint = "MessageBoxW")]&#xD;
        public static extern int MessageBoxW(int hWnd, [In][MarshalAs(UnmanagedType.LPWStr)] string lpText, [In][MarshalAs(UnmanagedType.LPWStr)] string lpCaption, int uType);&#xD;
&#xD;
        [DllImport("MyDll.dll", EntryPoint = "add", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = false)]&#xD;
        public static extern int add();&#xD;
&#xD;
        [DllImport("MyDll.dll", EntryPoint = "fnMyDLL", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi, SetLastError = false)]&#xD;
        public static extern int fnMyDLL(float x,float y);&#xD;
&#xD;
        [DllImport("MyDLL.dll", EntryPoint = "add2", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi, SetLastError = false)]&#xD;
        public static extern int add2(ref HHFC_SET stru);&#xD;
&lt;/pre&gt;&#xD;
&lt;pre &gt;//EntryPoint: 指定要调用的 DLL 入口点。默认入口点名称是托管方法的名称 。 &#xD;
        //CharSet: 控制名称重整和封送 String 参数的方式 (默认是UNICODE) &#xD;
        //CallingConvention指示入口点的函数调用约定(默认WINAPI) &#xD;
        //SetLastError 指示被调用方在从属性化方法返回之前是否调用 SetLastError Win32 API 函数 (C#中默认false )&#xD;
&#xD;
        public MainPage()&#xD;
        {&#xD;
            InitializeComponent();&#xD;
        }&#xD;
&#xD;
        private void button1_Click(object sender, RoutedEventArgs e)&#xD;
        {&#xD;
            this.textBox1.Text = add().ToString();&#xD;
            this.textBox2.Text = fnMyDLL(12,2).ToString();&#xD;
            MessageBoxW(0, "提交成功", "温馨提示", 0);&#xD;
&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #2b91af;"&gt;HHFC_SET&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;stru&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;HHFC_SET&lt;/span&gt;(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: navy;"&gt;stru&lt;/span&gt;.&lt;span style="color: navy;"&gt;Uid&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style="color: #a31515;"&gt;""&lt;/span&gt;; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Console&lt;/span&gt;.&lt;span style="color: #880000;"&gt;WriteLine&lt;/span&gt;(&lt;span style="color: navy;"&gt;stru&lt;/span&gt;.&lt;span style="color: navy;"&gt;Uid&lt;/span&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;a&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span style="color: #880000;"&gt;add2&lt;/span&gt;(&lt;span style="color: blue;"&gt;ref&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;stru&lt;/span&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Console&lt;/span&gt;.&lt;span style="color: #880000;"&gt;WriteLine&lt;/span&gt;(&lt;span style="color: navy;"&gt;stru&lt;/span&gt;.&lt;span style="color: navy;"&gt;Uid&lt;/span&gt;); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;    }&#xD;
&lt;/pre&gt;&#xD;
&lt;pre&gt;[&lt;span style="color: #2b91af;"&gt;StructLayout&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;LayoutKind&lt;/span&gt;.&lt;span style="color: navy;"&gt;Sequential&lt;/span&gt;)]&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;struct&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;HHFC_SET&lt;br /&gt;&lt;/span&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: #2b91af;"&gt;MarshalAs&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;UnmanagedType&lt;/span&gt;.&lt;span style="color: navy;"&gt;LPStr&lt;/span&gt;)]&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;Uid&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: #2b91af;"&gt;MarshalAs&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;UnmanagedType&lt;/span&gt;.&lt;span style="color: navy;"&gt;I4&lt;/span&gt;)]&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;code&lt;/span&gt;;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chuncn/aggbug/2314020.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chuncn/archive/2012/01/06/2314020.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chuncn/archive/2011/12/30/2307613.html</id><title type="text">Silverlight5通过P/Invoke调用系统win32的三个示例</title><summary type="text">调用Win32函数 public partial class MainPage : UserControl { [DllImportAttribute(&amp;quot;user32.dll&amp;quot;, EntryPoint = &amp;quot;MessageBoxW&amp;quot;)] public static extern int MessageBoxW( [In]System.IntPtr hWnd, [In][MarshalAs(UnmanagedType.LPWStr)] string lpText, [In][MarshalA...</summary><published>2011-12-30T08:00:00Z</published><updated>2011-12-30T08:00:00Z</updated><author><name>chuncn</name><uri>http://www.cnblogs.com/chuncn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chuncn/archive/2011/12/30/2307613.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chuncn/archive/2011/12/30/2307613.html"/><content type="html">&lt;p&gt;调用Win32函数&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;public partial class MainPage : UserControl&#xD;
    {&#xD;
        [DllImportAttribute("user32.dll", EntryPoint = "MessageBoxW")]&#xD;
        public static extern int MessageBoxW(&#xD;
            [In]System.IntPtr hWnd,&#xD;
            [In][MarshalAs(UnmanagedType.LPWStr)] string lpText,&#xD;
            [In][MarshalAs(UnmanagedType.LPWStr)] string lpCaption,&#xD;
            uint uType);&#xD;
&#xD;
        [DllImport("user32.dll", EntryPoint = "MessageBoxA")]&#xD;
        static extern int MsgBox(int hWnd, string msg, string caption, int type);&#xD;
&#xD;
        [DllImport("kernel32.dll")]&#xD;
        public static extern bool Beep(int frequency, int duration);&#xD;
&#xD;
        [DllImport("learnDll.dll")]//, EntryPoint = "fnlearnDll"&#xD;
        public static extern int fnlearnDll();&#xD;
&#xD;
        public void PlaySound()&#xD;
        {&#xD;
            Random random = new Random();&#xD;
            for (int i = 0; i &amp;lt; 50; i++)&#xD;
            {&#xD;
                Beep(random.Next(10000), 100);&#xD;
            }&#xD;
        }&#xD;
&#xD;
        public MainPage()&#xD;
        {&#xD;
            InitializeComponent();&#xD;
        }&#xD;
&#xD;
        private void button1_Click(object sender, RoutedEventArgs e)&#xD;
        {&#xD;
            PlaySound();&#xD;
            MsgBox(0, "Hello", "Interop", 0);&#xD;
            //MessageBoxW(IntPtr.Zero, "Hello", "Interop", 0);&#xD;
            fnlearnDll();&#xD;
        }&#xD;
    }&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;-------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;USB设备插取识别&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;public partial class SilverlightControl1 : UserControl&#xD;
    {&#xD;
        // Importing a set of necessary native methods from Win32 API.&#xD;
        [DllImport("User32", EntryPoint = "CreateWindowEx", CharSet = CharSet.Auto, SetLastError = true)]&#xD;
        static extern IntPtr CreateWindowEx(int dwExStyle, string lpszClassName, string lpszWindowName, int style, int x, int y, int width, int height,&#xD;
            IntPtr hWndParent, IntPtr hMenu, IntPtr hInst,&#xD;
            [MarshalAs(UnmanagedType.AsAny)] object pvParam);&#xD;
&#xD;
        [DllImport("user32.dll")]&#xD;
        static extern IntPtr DefWindowProc(IntPtr hWnd, int uMsg,&#xD;
            IntPtr wParam, IntPtr lParam);&#xD;
&#xD;
        [DllImport("user32", CharSet = CharSet.Auto, SetLastError = true)]&#xD;
        public static extern short RegisterClass(WNDCLASS wc);&#xD;
&#xD;
        // Marshaling the Window structure.&#xD;
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]&#xD;
        public class WNDCLASS&#xD;
        {&#xD;
            public int style;&#xD;
            public WndProc lpfnWndProc;&#xD;
            public int cbClsExtra;&#xD;
            public int cbWndExtra;&#xD;
            public IntPtr hInstance;&#xD;
            public IntPtr hIcon;&#xD;
            public IntPtr hCursor;&#xD;
            public IntPtr hbrBackground;&#xD;
            public string lpszMenuName;&#xD;
            public string lpszClassName;&#xD;
        }&#xD;
&#xD;
        //system detects USB insertion/removal&#xD;
        const int WM_DEVICECHANGE = 0x0219;&#xD;
        // system detects a new device&#xD;
        const int DBT_DEVICEARRIVAL = 0x8000;&#xD;
        // device removed&#xD;
        const int DBT_DEVICEREMOVECOMPLETE = 0x8004;&#xD;
&#xD;
        // Callbacks must have AllowReversePInvokeCalls attribute.&#xD;
        [AllowReversePInvokeCalls]&#xD;
        private IntPtr Callback(IntPtr hWnd, int msg, IntPtr wparam, IntPtr lparam)&#xD;
        {&#xD;
            if (msg == WM_DEVICECHANGE)&#xD;
            {&#xD;
                if (wparam.ToInt32() == DBT_DEVICEARRIVAL)&#xD;
                    textBlock1.Text = "USB inserted";&#xD;
                if (wparam.ToInt32() == DBT_DEVICEREMOVECOMPLETE)&#xD;
                    textBlock1.Text = "USB removed";&#xD;
            }&#xD;
            return DefWindowProc(hWnd, msg, wparam, lparam);&#xD;
        }&#xD;
&#xD;
        public delegate IntPtr WndProc(&#xD;
            IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);&#xD;
&#xD;
        // Preventing garbage collection of the delegate&#xD;
        private static WndProc dontGCthis;&#xD;
&#xD;
        public SilverlightControl1()&#xD;
        {&#xD;
            InitializeComponent();&#xD;
&#xD;
            WNDCLASS wc = new WNDCLASS();&#xD;
&#xD;
            // Preventing garbage collection of the delegate&#xD;
            dontGCthis = new WndProc(Callback);&#xD;
            wc.lpfnWndProc = dontGCthis;&#xD;
&#xD;
            // Note that you need to ensure unique names     // for each registered class.&#xD;
            // For example, if you open the same plugin &#xD;
            // in two different tabs of the browser,&#xD;
            // you still should not end up with &#xD;
            // two registered classes with identical names.&#xD;
            wc.lpszClassName = "foobar" + (new Random()).Next();&#xD;
&#xD;
            RegisterClass(wc);&#xD;
&#xD;
            IntPtr createResult = CreateWindowEx(0, wc.lpszClassName, "Window title", 0, 100, 100, 500, 500, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, 0);&#xD;
        }&#xD;
    }&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;-----------------------------------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;进程实时管理&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&amp;lt;UserControl&#xD;
  x:Class="SilverlightApplication10.MainPage"&#xD;
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&#xD;
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&#xD;
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"&#xD;
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"&#xD;
  mc:Ignorable="d"&#xD;
  d:DesignHeight="300"&#xD;
  d:DesignWidth="400"&#xD;
  xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"&#xD;
  xmlns:local="clr-namespace:SilverlightApplication10"&amp;gt;&#xD;
  &amp;lt;UserControl.DataContext&amp;gt;&#xD;
    &amp;lt;local:ProcessViewModel /&amp;gt;&#xD;
  &amp;lt;/UserControl.DataContext&amp;gt;&#xD;
  &amp;lt;Grid&#xD;
    x:Name="LayoutRoot"&#xD;
    Margin="6"&#xD;
    Background="White"&amp;gt;&#xD;
    &amp;lt;Grid.RowDefinitions&amp;gt;&#xD;
      &amp;lt;RowDefinition&#xD;
        Height="Auto" /&amp;gt;&#xD;
      &amp;lt;RowDefinition /&amp;gt;&#xD;
    &amp;lt;/Grid.RowDefinitions&amp;gt;&#xD;
    &amp;lt;TextBlock&#xD;
      Text="Process Information"&#xD;
      FontSize="16" /&amp;gt;&#xD;
    &amp;lt;sdk:DataGrid&#xD;
      Grid.Row="1"&#xD;
      Margin="2"&#xD;
      AutoGenerateColumns="true" &#xD;
      ItemsSource="{Binding Processes}"/&amp;gt;&#xD;
  &amp;lt;/Grid&amp;gt;&#xD;
&amp;lt;/UserControl&amp;gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;public class PropertyChangeNotification : INotifyPropertyChanged&#xD;
  {&#xD;
    protected void RaisePropertyChanged(string property)&#xD;
    {&#xD;
      if (this.PropertyChanged != null)&#xD;
      {&#xD;
        this.PropertyChanged(this,&#xD;
          new PropertyChangedEventArgs(property));&#xD;
      }&#xD;
    }&#xD;
    public event PropertyChangedEventHandler PropertyChanged;&#xD;
  }&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;using System.ComponentModel;&#xD;
  using System.Collections.Generic;&#xD;
  using System.Windows;&#xD;
  using System.Collections.ObjectModel;&#xD;
  using System.Linq;&#xD;
  using System.Windows.Threading;&#xD;
  using System;&#xD;
  using System.Threading.Tasks;&#xD;
&#xD;
  public class ProcessViewModel : PropertyChangeNotification&#xD;
  {&#xD;
    public ProcessViewModel()&#xD;
    {&#xD;
      if (Application.Current.HasElevatedPermissions)&#xD;
      {&#xD;
        BuildInitialProcessList();&#xD;
      }&#xD;
    }&#xD;
    void BuildInitialProcessList()&#xD;
    {&#xD;
      this.Processes = new ObservableCollection&amp;lt;Process&amp;gt;();&#xD;
      BuildProcessList();&#xD;
&#xD;
      DispatcherTimer timer = new DispatcherTimer();&#xD;
      timer.Interval = TimeSpan.FromMilliseconds(500);&#xD;
      timer.Tick += (s, e) =&amp;gt; BuildProcessList();&#xD;
      timer.Start();&#xD;
    }&#xD;
    void BuildProcessList()&#xD;
    {&#xD;
      IEnumerable&amp;lt;Process&amp;gt; newProcesses = Process.EnumerateCurrentList();&#xD;
&#xD;
      var newProcsOuterJoinedExisting =&#xD;
        from np in newProcesses&#xD;
        join op in this.Processes&#xD;
        on np.Id equals op.Id into joinGroup&#xD;
        from gp in joinGroup.DefaultIfEmpty()&#xD;
        select new { NewProcess = np, OldProcess = gp };&#xD;
&#xD;
      foreach (var item in newProcsOuterJoinedExisting.ToList())&#xD;
      {&#xD;
        if (item.OldProcess == null)&#xD;
        {&#xD;
          this.Processes.Add(item.NewProcess);&#xD;
        }&#xD;
        else&#xD;
        {&#xD;
          item.OldProcess.Refresh();&#xD;
        }&#xD;
      }&#xD;
&#xD;
      var remainingListOuterJoinedNewProcs =&#xD;
        from cp in this.Processes&#xD;
        join np in newProcesses&#xD;
        on cp.Id equals np.Id into joinGroup&#xD;
        from gp in joinGroup.DefaultIfEmpty()&#xD;
        select new { CurrentProcess = cp, NewProcess = gp };&#xD;
&#xD;
      foreach (var item in remainingListOuterJoinedNewProcs.ToList())&#xD;
      {&#xD;
        if (item.NewProcess == null)&#xD;
        {&#xD;
          this.Processes.Remove(item.CurrentProcess);&#xD;
        }&#xD;
      }&#xD;
    }&#xD;
    public ObservableCollection&amp;lt;Process&amp;gt; Processes&#xD;
    {&#xD;
      get&#xD;
      {&#xD;
        return (_Processes);&#xD;
      }&#xD;
      set&#xD;
      {&#xD;
        _Processes = value;&#xD;
        RaisePropertyChanged("Processes");&#xD;
      }&#xD;
    }&#xD;
    ObservableCollection&amp;lt;Process&amp;gt; _Processes;&#xD;
  }&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;using System;&#xD;
  using System.Collections.Generic;&#xD;
  using System.Runtime.InteropServices;&#xD;
  using System.Text;&#xD;
  using System.IO;&#xD;
&#xD;
  internal class Win32Exception : Exception&#xD;
  {&#xD;
    public Win32Exception(string message, int errorCode)&#xD;
      : base(message)&#xD;
    {&#xD;
      this.ErrorCode = errorCode;&#xD;
    }&#xD;
    public int ErrorCode { get; private set; }&#xD;
  }&#xD;
  public class Process : PropertyChangeNotification&#xD;
  {&#xD;
    [StructLayout(LayoutKind.Sequential)]&#xD;
    struct PROCESS_MEMORY_COUNTERS&#xD;
    {&#xD;
      public UInt32 cb;&#xD;
      public UInt32 PageFaultCount;&#xD;
      public UIntPtr PeakWorkingSetSize;&#xD;
      public UIntPtr WorkingSetSize;&#xD;
      public UIntPtr QuotaPeakPagedPoolUsage;&#xD;
      public UIntPtr QuotaPagedPoolUsage;&#xD;
      public UIntPtr QuotaPeakNonPagedPoolUsage;&#xD;
      public UIntPtr QuotaNonPagedPoolUsage;&#xD;
      public UIntPtr PagefileUsage;&#xD;
      public UIntPtr PeakPagefileUsage;&#xD;
    };&#xD;
&#xD;
    public Process(UInt32 processId)&#xD;
    {&#xD;
      this.Id = processId;&#xD;
    }&#xD;
    public UInt32 Id { get; private set; }&#xD;
&#xD;
    public UInt64 WorkingSetBytes&#xD;
    {&#xD;
      get&#xD;
      {&#xD;
        PROCESS_MEMORY_COUNTERS counters;&#xD;
        IntPtr handle = GetHandle();&#xD;
&#xD;
        try&#xD;
        {&#xD;
          if (!GetProcessMemoryInfo(handle, out counters,&#xD;
            (UInt32)Marshal.SizeOf(typeof(PROCESS_MEMORY_COUNTERS))))&#xD;
          {&#xD;
            throw new Win32Exception("Failed to get memory info",&#xD;
              Marshal.GetLastWin32Error());&#xD;
          }&#xD;
        }&#xD;
        finally&#xD;
        {&#xD;
          CloseHandle(handle);&#xD;
        }&#xD;
        return (counters.WorkingSetSize.ToUInt64());&#xD;
      }&#xD;
    }&#xD;
&#xD;
    public void Refresh()&#xD;
    {&#xD;
      this.RaisePropertyChanged("WorkingSetBytes");&#xD;
    }&#xD;
&#xD;
    public string ImageName&#xD;
    {&#xD;
      get&#xD;
      {&#xD;
        if (string.IsNullOrEmpty(this.imageName))&#xD;
        {&#xD;
          UInt32 capacity = 128;&#xD;
          StringBuilder builder = new StringBuilder((int)capacity);&#xD;
&#xD;
          IntPtr handle = GetHandle();&#xD;
&#xD;
          try&#xD;
          {&#xD;
            while (GetProcessImageFileName(handle, builder, capacity) == 0)&#xD;
            {&#xD;
              int errorCode = Marshal.GetLastWin32Error();&#xD;
&#xD;
              if (errorCode == ERROR_INSUFFICIENT_BUFFER)&#xD;
              {&#xD;
                capacity *= 2;&#xD;
                builder = new StringBuilder((int)capacity);&#xD;
              }&#xD;
              else&#xD;
              {&#xD;
                throw new Win32Exception("Failed to get image name", errorCode);&#xD;
              }&#xD;
            }&#xD;
            this.imageName = Path.GetFileName(builder.ToString());&#xD;
          }&#xD;
          finally&#xD;
          {&#xD;
            CloseHandle(handle);&#xD;
          }&#xD;
        }&#xD;
        return (this.imageName);&#xD;
      }&#xD;
    }&#xD;
    string imageName;&#xD;
&#xD;
    IntPtr GetHandle()&#xD;
    {&#xD;
      IntPtr handle = OpenProcess(PROCESS_QUERY_INFORMATION, false, this.Id);&#xD;
&#xD;
      if (handle == IntPtr.Zero)&#xD;
      {&#xD;
        throw new Win32Exception("Failed to open process",&#xD;
          Marshal.GetLastWin32Error());&#xD;
      }&#xD;
      return (handle);&#xD;
    }&#xD;
    static bool TryOpenProcess(UInt32 id)&#xD;
    {&#xD;
      IntPtr ptr = OpenProcess(PROCESS_QUERY_INFORMATION, false, id);&#xD;
&#xD;
      if (ptr != IntPtr.Zero)&#xD;
      {&#xD;
        CloseHandle(ptr);&#xD;
      }&#xD;
      return (ptr != IntPtr.Zero);&#xD;
    }&#xD;
    public static IEnumerable&amp;lt;Process&amp;gt; EnumerateCurrentList()&#xD;
    {&#xD;
      foreach (var processId in EnumerateProcessIds())&#xD;
      {&#xD;
        if (TryOpenProcess(processId))&#xD;
        {&#xD;
          yield return new Process(processId);&#xD;
        }&#xD;
      }&#xD;
    }&#xD;
    static IEnumerable&amp;lt;UInt32&amp;gt; EnumerateProcessIds()&#xD;
    {&#xD;
      UInt32[] processIds = new UInt32[32];&#xD;
      bool retry = true;&#xD;
&#xD;
      while (retry)&#xD;
      {&#xD;
        processIds = new UInt32[processIds.Length * 2];&#xD;
&#xD;
        UInt32 arraySize =&#xD;
          (UInt32)(Marshal.SizeOf(typeof(UInt32)) * processIds.Length);&#xD;
&#xD;
        UInt32 bytesCopied = 0;&#xD;
&#xD;
        retry = EnumProcesses(processIds, arraySize, out bytesCopied);&#xD;
&#xD;
        if (retry)&#xD;
        {&#xD;
          retry = (bytesCopied == arraySize);&#xD;
        }&#xD;
        else&#xD;
        {&#xD;
          throw new Win32Exception("Failed enumerating processes",&#xD;
            Marshal.GetLastWin32Error());&#xD;
        }&#xD;
      }&#xD;
      return (processIds);&#xD;
    }&#xD;
&#xD;
    [DllImport("psapi", SetLastError = true)]&#xD;
    static extern bool EnumProcesses(&#xD;
      [MarshalAs(UnmanagedType.LPArray)] [In] [Out] UInt32[] processIds,&#xD;
      UInt32 processIdsSizeBytes,&#xD;
      out UInt32 bytesCopied);&#xD;
&#xD;
    [DllImport("kernel32", SetLastError = true)]&#xD;
    static extern IntPtr OpenProcess(UInt32 dwAccess, bool bInheritHandle,&#xD;
      UInt32 dwProcessId);&#xD;
&#xD;
    [DllImport("kernel32")]&#xD;
    static extern bool CloseHandle(IntPtr handle);&#xD;
&#xD;
    [DllImport("psapi", SetLastError = true)]&#xD;
    static extern UInt32 GetProcessImageFileName(&#xD;
      IntPtr processHandle,&#xD;
      [In] [Out] StringBuilder lpImageFileName,&#xD;
      UInt32 bufferSizeCharacters);&#xD;
&#xD;
    [DllImport("psapi", SetLastError = true)]&#xD;
    static extern bool GetProcessMemoryInfo(&#xD;
      IntPtr processHandle,&#xD;
      out PROCESS_MEMORY_COUNTERS counters,&#xD;
      UInt32 dwSize);&#xD;
&#xD;
    static readonly UInt32 PROCESS_QUERY_INFORMATION = 0x0400;&#xD;
    const int ERROR_ACCESS_DENIED = 5;&#xD;
    const int ERROR_INVALID_PARAMETER = 87;&#xD;
    const int ERROR_INSUFFICIENT_BUFFER = 122;&#xD;
  }&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chuncn/aggbug/2307613.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chuncn/archive/2011/12/30/2307613.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chuncn/archive/2011/12/20/2294857.html</id><title type="text">Visual Studio2010中使用IE调试Atl</title><summary type="text">项目属性： Command:C:\Program Files (x86)\Internet Explorer\iexplore.exe Command Arguments:c:\A1Atl\A2Atl\A2Ctl.htm注册表： 在“HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main”下新建类型为DWORD(32)、名为TabProcGrowth、值为D的键。策略： 运行gpedit.msc组策略管理器。在“计算机配置—》管理模板—》windows组件—》Internet Explore”中打开“选项卡进程增长”，设置...</summary><published>2011-12-20T08:30:00Z</published><updated>2011-12-20T08:30:00Z</updated><author><name>chuncn</name><uri>http://www.cnblogs.com/chuncn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chuncn/archive/2011/12/20/2294857.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chuncn/archive/2011/12/20/2294857.html"/><content type="html">&lt;p&gt;&lt;strong&gt;项目属性：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Command:&amp;nbsp;&amp;nbsp;C:\Program Files (x86)\Internet Explorer\iexplore.exe&lt;/p&gt;&#xD;
&lt;p&gt;Command Arguments:&amp;nbsp;c:\A1Atl\A2Atl\A2Ctl.htm&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;注册表：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在&amp;ldquo;HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main&amp;rdquo;下新建类型为DWORD(32)、名为TabProcGrowth、值为D的键。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;策略：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;运行gpedit.msc组策略管理器。在&amp;ldquo;计算机配置&amp;mdash;》管理模板&amp;mdash;》windows组件&amp;mdash;》Internet Explore&amp;rdquo;中打开&amp;ldquo;选项卡进程增长&amp;rdquo;，设置为已启用，选项卡进程增长为0&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;调试：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;最后，设置断点，按F5运行起来，就可以调试了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chuncn/aggbug/2294857.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chuncn/archive/2011/12/20/2294857.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chuncn/archive/2011/12/20/2294096.html</id><title type="text">C#与C++之间类型的对应</title><summary type="text">C#与C++之间类型的对应 Windows Data Type.NET Data TypeBOOL, BOOLEANBoolean or Int32BSTRStringBYTEByteCHARCharDOUBLEDoubleDWORDInt32 or UInt32FLOATSingleHANDLE (and all other handle types, such as HFONT and HMENU)IntPtr, UintPtr or HandleRefHRESULTInt32 or UInt32INTInt32LANGIDInt16 or UInt16LCIDInt32 or UInt.</summary><published>2011-12-19T16:13:00Z</published><updated>2011-12-19T16:13:00Z</updated><author><name>chuncn</name><uri>http://www.cnblogs.com/chuncn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chuncn/archive/2011/12/20/2294096.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chuncn/archive/2011/12/20/2294096.html"/><content type="html">&lt;p align="left"&gt;&lt;strong&gt;&lt;a href="http://blog.csdn.net/JacksonH/archive/2005/07/27/436410.aspx"&gt; C#与C++之间类型的对应&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;table style="width: 720px;" border="1" cellpadding="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="center"&gt;&lt;strong&gt;Windows Data Type&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="center"&gt;&lt;strong&gt;.NET Data Type&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;BOOL, BOOLEAN&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;Boolean or Int32&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;BSTR&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;String&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;BYTE&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;Byte&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;CHAR&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;Char&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;DOUBLE&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;Double&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;DWORD&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;Int32 or UInt32&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;FLOAT&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;Single&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;HANDLE (and all other handle types, such as HFONT and HMENU)&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;IntPtr, UintPtr or HandleRef&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;HRESULT&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;Int32 or UInt32&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;INT&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;Int32&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;LANGID&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;Int16 or UInt16&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;LCID&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;Int32 or UInt32&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;LONG&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;Int32&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;LPARAM&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;IntPtr, UintPtr or Object&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;LPCSTR&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;String&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;LPCTSTR&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;String&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;LPCWSTR&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;String&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;LPSTR&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;String or StringBuilder*&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;LPTSTR&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;String or StringBuilder&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;LPWSTR&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;String or StringBuilder&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;LPVOID&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;IntPtr, UintPtr or Object&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;LRESULT&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;IntPtr&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;SAFEARRAY&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;.NET array type&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;SHORT&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;Int16&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;TCHAR&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;Char&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;UCHAR&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;SByte&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;UINT&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;Int32 or UInt32&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;ULONG&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;Int32 or UInt32&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;VARIANT&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;Object&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;VARIANT_BOOL&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;Boolean&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;WCHAR&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;Char&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;WORD&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;Int16 or UInt16&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p align="left"&gt;WPARAM&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="287"&gt;&#xD;
&lt;p align="left"&gt;IntPtr, UintPtr or Object&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p align="left"&gt;另： 在进行string转换时，需要加入前缀[MarshalAs(UnmanagedType.LPStr)]lpdword 对应于 ref int&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;table style="width: 675px;" border="1" cellspacing="1" cellpadding="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="362"&gt;&#xD;
&lt;p align="center"&gt;&lt;strong&gt;C/C++&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="311"&gt;&#xD;
&lt;p align="center"&gt;&lt;strong&gt;C#&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="362"&gt;&#xD;
&lt;p align="left"&gt;HANDLE, LPDWORD, LPVOID, void*&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="311"&gt;&#xD;
&lt;p align="left"&gt;IntPtr&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="362"&gt;&#xD;
&lt;p align="left"&gt;LPCTSTR, LPCTSTR, LPSTR, char*, const char*, Wchar_t*, LPWSTR&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="311"&gt;&#xD;
&lt;p align="left"&gt;String [in], StringBuilder [in, out]&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="362"&gt;&#xD;
&lt;p align="left"&gt;DWORD, unsigned long, Ulong&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="311"&gt;&#xD;
&lt;p align="left"&gt;UInt32, [MarshalAs(UnmanagedType.U4)]&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="362"&gt;&#xD;
&lt;p align="left"&gt;bool&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="311"&gt;&#xD;
&lt;p align="left"&gt;bool&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="362"&gt;&#xD;
&lt;p align="left"&gt;LP&amp;lt;struct&amp;gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="311"&gt;&#xD;
&lt;p align="left"&gt;[In] ref &amp;lt;struct&amp;gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="362"&gt;&#xD;
&lt;p align="left"&gt;SIZE_T&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="311"&gt;&#xD;
&lt;p align="left"&gt;uint&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="362"&gt;&#xD;
&lt;p align="left"&gt;LPDWORD&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="311"&gt;&#xD;
&lt;p align="left"&gt;out uint&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="362"&gt;&#xD;
&lt;p align="left"&gt;LPTSTR&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="311"&gt;&#xD;
&lt;p align="left"&gt;[Out] StringBuilder&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="362"&gt;&#xD;
&lt;p align="left"&gt;PULARGE_INTEGER&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="311"&gt;&#xD;
&lt;p align="left"&gt;out ulong&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="362"&gt;&#xD;
&lt;p align="left"&gt;WORD&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="311"&gt;&#xD;
&lt;p align="left"&gt;uInt16&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="362"&gt;&#xD;
&lt;p align="left"&gt;Byte, unsigned char&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="311"&gt;&#xD;
&lt;p align="left"&gt;byte&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="362"&gt;&#xD;
&lt;p align="left"&gt;Short&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="311"&gt;&#xD;
&lt;p align="left"&gt;Int16&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="362"&gt;&#xD;
&lt;p align="left"&gt;Long, int&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="311"&gt;&#xD;
&lt;p align="left"&gt;Int32&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="362"&gt;&#xD;
&lt;p align="left"&gt;float&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="311"&gt;&#xD;
&lt;p align="left"&gt;single&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="362"&gt;&#xD;
&lt;p align="left"&gt;double&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="311"&gt;&#xD;
&lt;p align="left"&gt;double&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="362"&gt;&#xD;
&lt;p align="left"&gt;NULL pointer&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="311"&gt;&#xD;
&lt;p align="left"&gt;IntPtr.Zero&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="362"&gt;&#xD;
&lt;p align="left"&gt;Uint&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="311"&gt;&#xD;
&lt;p align="left"&gt;Uint32&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p&gt;C#调用DLL文件时参数对应表&lt;/p&gt;&#xD;
&lt;p&gt;Wtypes.h中的非托管类型&amp;nbsp; 非托管 C语言类型&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 托管类名&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 说明 &lt;br /&gt;HANDLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.IntPtr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 32 位 &lt;br /&gt;BYTE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Byte&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;8 位 &lt;br /&gt;SHORT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;short&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Int16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 16 位 &lt;br /&gt;WORD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned short&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.UInt16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 16 位 &lt;br /&gt;INT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Int32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;32 位 &lt;br /&gt;UINT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.UInt32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;32 位 &lt;br /&gt;LONG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;long&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Int32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 32 位 &lt;br /&gt;BOOL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;long&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Int32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 32 位 &lt;br /&gt;DWORD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned long&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.UInt32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 32 位 &lt;br /&gt;ULONG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned long&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.UInt32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 32 位 &lt;br /&gt;CHAR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 用 ANSI 修饰。&lt;br /&gt;LPSTR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;char*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.String 或 System.StringBuilder&amp;nbsp;&amp;nbsp; 用 ANSI 修饰。 &lt;br /&gt;LPCSTR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Const char*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.String 或System.StringBuilder&amp;nbsp;&amp;nbsp; 用 ANSI 修饰。 &lt;br /&gt;LPWSTR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wchar_t*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.String 或System.StringBuilder&amp;nbsp;&amp;nbsp; 用 Unicode 修饰。 &lt;br /&gt;LPCWSTR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Const wchar_t*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.String 或System.StringBuilder&amp;nbsp;&amp;nbsp; 用 Unicode 修饰。 &lt;br /&gt;FLOAT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Float&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Single&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;32 位 &lt;br /&gt;DOUBLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Double&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Double&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;64 位&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;习惯用C#写东西,但平时又会碰到很多要用win32 API的地方,所以经常要用DllImport,但win32函数的类型写法是很庞杂的,相信为之困扰的不止我一个,现在我整理一份我个人的理解如下,希望高人不吝赐教。&lt;br /&gt;我的基本原则有如下几点:&lt;br /&gt;1、下面都是针对32位系统的，所以int是32位.long也是32位；&lt;br /&gt;2、各种句柄类的(H开头)，我认为一律是System.IntPtr，到目前为止没发现出错；如果哪位在使用中出错，请指出；&lt;br /&gt;3、LP和P，我实在不懂(对C 不太了解)，对于LP和P开头的函数，如果是和STR有关的，一律写为System.String，像PLCID这样指向什么东西的，写为System.UInt32(因为指向另一个地址，那就是指针，指针是32位吧)，int之类的数值型，那我就写为int[]，以方便.net程序引用(写成System.UInt32的话，给API调用应该也不会出错，但.net程序就不好引用了)&lt;/p&gt;&#xD;
&lt;p align="left"&gt;如有意见，欢迎指教。谢谢&lt;/p&gt;&#xD;
&lt;p align="left"&gt;BOOL=System.Int32&lt;br /&gt;BOOLEAN=System.Int32&lt;br /&gt;BYTE=System.UInt16&lt;br /&gt;CHAR=System.Int16&lt;br /&gt;COLORREF=System.UInt32&lt;br /&gt;DWORD=System.UInt32&lt;br /&gt;DWORD32=System.UInt32&lt;br /&gt;DWORD64=System.UInt64&lt;br /&gt;FLOAT=System.Float&lt;br /&gt;HACCEL=System.IntPtr&lt;br /&gt;HANDLE=System.IntPtr&lt;br /&gt;HBITMAP=System.IntPtr&lt;br /&gt;HBRUSH=System.IntPtr&lt;br /&gt;HCONV=System.IntPtr&lt;br /&gt;HCONVLIST=System.IntPtr&lt;br /&gt;HCURSOR=System.IntPtr&lt;br /&gt;HDC=System.IntPtr&lt;br /&gt;HDDEDATA=System.IntPtr&lt;br /&gt;HDESK=System.IntPtr&lt;br /&gt;HDROP=System.IntPtr&lt;br /&gt;HDWP=System.IntPtr&lt;br /&gt;HENHMETAFILE=System.IntPtr&lt;br /&gt;HFILE=System.IntPtr&lt;br /&gt;HFONT=System.IntPtr&lt;br /&gt;HGDIOBJ=System.IntPtr&lt;br /&gt;HGLOBAL=System.IntPtr&lt;br /&gt;HHOOK=System.IntPtr&lt;br /&gt;HICON=System.IntPtr&lt;br /&gt;HIMAGELIST=System.IntPtr&lt;br /&gt;HIMC=System.IntPtr&lt;br /&gt;HINSTANCE=System.IntPtr&lt;br /&gt;HKEY=System.IntPtr&lt;br /&gt;HLOCAL=System.IntPtr&lt;br /&gt;HMENU=System.IntPtr&lt;br /&gt;HMETAFILE=System.IntPtr&lt;br /&gt;HMODULE=System.IntPtr&lt;br /&gt;HMONITOR=System.IntPtr&lt;br /&gt;HPALETTE=System.IntPtr&lt;br /&gt;HPEN=System.IntPtr&lt;br /&gt;HRGN=System.IntPtr&lt;br /&gt;HRSRC=System.IntPtr&lt;br /&gt;HSZ=System.IntPtr&lt;br /&gt;HWINSTA=System.IntPtr&lt;br /&gt;HWND=System.IntPtr&lt;br /&gt;INT=System.Int32&lt;br /&gt;INT32=System.Int32&lt;br /&gt;INT64=System.Int64&lt;br /&gt;LONG=System.Int32&lt;br /&gt;LONG32=System.Int32&lt;br /&gt;LONG64=System.Int64&lt;br /&gt;LONGLONG=System.Int64&lt;br /&gt;LPARAM=System.IntPtr&lt;br /&gt;LPBOOL=System.Int16[]&lt;br /&gt;LPBYTE=System.UInt16[]&lt;br /&gt;LPCOLORREF=System.UInt32[]&lt;br /&gt;LPCSTR=System.String&lt;br /&gt;LPCTSTR=System.String&lt;br /&gt;LPCVOID=System.UInt32&lt;br /&gt;LPCWSTR=System.String&lt;br /&gt;LPDWORD=System.UInt32[]&lt;br /&gt;LPHANDLE=System.UInt32&lt;br /&gt;LPINT=System.Int32[]&lt;br /&gt;LPLONG=System.Int32[]&lt;br /&gt;LPSTR=System.String&lt;br /&gt;LPTSTR=System.String&lt;br /&gt;LPVOID=System.UInt32&lt;br /&gt;LPWORD=System.Int32[]&lt;br /&gt;LPWSTR=System.String&lt;br /&gt;LRESULT=System.IntPtr&lt;br /&gt;PBOOL=System.Int16[]&lt;br /&gt;PBOOLEAN=System.Int16[]&lt;br /&gt;PBYTE=System.UInt16[]&lt;br /&gt;PCHAR=System.Char[]&lt;br /&gt;PCSTR=System.String&lt;br /&gt;PCTSTR=System.String&lt;br /&gt;PCWCH=System.UInt32&lt;br /&gt;PCWSTR=System.UInt32&lt;br /&gt;PDWORD=System.Int32[]&lt;br /&gt;PFLOAT=System.Float[]&lt;br /&gt;PHANDLE=System.UInt32&lt;br /&gt;PHKEY=System.UInt32&lt;br /&gt;PINT=System.Int32[]&lt;br /&gt;PLCID=System.UInt32&lt;br /&gt;PLONG=System.Int32[]&lt;br /&gt;PLUID=System.UInt32&lt;br /&gt;PSHORT=System.Int16[]&lt;br /&gt;PSTR=System.String&lt;br /&gt;PTBYTE=System.Char[]&lt;br /&gt;PTCHAR=System.Char[]&lt;br /&gt;PTSTR=System.String&lt;br /&gt;PUCHAR=System.Char[]&lt;br /&gt;PUINT=System.UInt32[]&lt;br /&gt;PULONG=System.UInt32[]&lt;br /&gt;PUSHORT=System.UInt16[]&lt;br /&gt;PVOID=System.UInt32&lt;br /&gt;PWCHAR=System.Char[]&lt;br /&gt;PWORD=System.Int16[]&lt;br /&gt;PWSTR=System.String&lt;br /&gt;REGSAM=System.UInt32&lt;br /&gt;SC_HANDLE=System.IntPtr&lt;br /&gt;SC_LOCK=System.IntPtr&lt;br /&gt;SHORT=System.Int16&lt;br /&gt;SIZE_T=System.UInt32&lt;br /&gt;SSIZE_=System.UInt32&lt;br /&gt;TBYTE=System.Char&lt;br /&gt;TCHAR=System.Char&lt;br /&gt;UCHAR=System.&#xD;
&#xD;
&#xD;
&lt;/p&gt;&#xD;
&lt;table style="width: 98%;" border="0" cellpadding="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;Wtypes.h &lt;/strong&gt;&lt;strong&gt;中的非托管类型 &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="17%"&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;非托管 C 语言类型 &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="27%"&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;托管类名 &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;说明 &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;HANDLE&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="17%"&gt;&#xD;
&lt;p align="left"&gt;void*&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="27%"&gt;&#xD;
&lt;p align="left"&gt;System.IntPtr&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;在 32 位 Windows 操作系统上为 32 位，在 64 位 Windows 操作系统上为 64 位。&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;BYTE&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="17%"&gt;&#xD;
&lt;p align="left"&gt;unsigned char&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="27%"&gt;&#xD;
&lt;p align="left"&gt;System.Byte&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;8 位&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;SHORT&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="17%"&gt;&#xD;
&lt;p align="left"&gt;short&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="27%"&gt;&#xD;
&lt;p align="left"&gt;System.Int16&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;16 位&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;WORD&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="17%"&gt;&#xD;
&lt;p align="left"&gt;unsigned short&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="27%"&gt;&#xD;
&lt;p align="left"&gt;System.UInt16&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;16 位&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;INT&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="17%"&gt;&#xD;
&lt;p align="left"&gt;int&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="27%"&gt;&#xD;
&lt;p align="left"&gt;System.Int32&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;32 位&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;UINT&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="17%"&gt;&#xD;
&lt;p align="left"&gt;unsigned int&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="27%"&gt;&#xD;
&lt;p align="left"&gt;System.UInt32&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;32 位&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;LONG&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="17%"&gt;&#xD;
&lt;p align="left"&gt;long&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="27%"&gt;&#xD;
&lt;p align="left"&gt;System.Int32&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;32 位&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;BOOL&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="17%"&gt;&#xD;
&lt;p align="left"&gt;long&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="27%"&gt;&#xD;
&lt;p align="left"&gt;System.Int32&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;32 位&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;DWORD&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="17%"&gt;&#xD;
&lt;p align="left"&gt;unsigned long&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="27%"&gt;&#xD;
&lt;p align="left"&gt;System.UInt32&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;32 位&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;ULONG&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="17%"&gt;&#xD;
&lt;p align="left"&gt;unsigned long&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="27%"&gt;&#xD;
&lt;p align="left"&gt;System.UInt32&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;32 位&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;CHAR&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="17%"&gt;&#xD;
&lt;p align="left"&gt;char&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="27%"&gt;&#xD;
&lt;p align="left"&gt;System.Char&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;用 ANSI 修饰。&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;LPSTR&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="17%"&gt;&#xD;
&lt;p align="left"&gt;char*&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="27%"&gt;&#xD;
&lt;p align="left"&gt;System.String 或 &amp;nbsp; System.Text.StringBuilder&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;用 ANSI 修饰。&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;LPCSTR&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="17%"&gt;&#xD;
&lt;p align="left"&gt;Const char*&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="27%"&gt;&#xD;
&lt;p align="left"&gt;System.String 或 &amp;nbsp; System.Text.StringBuilder&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;用 ANSI 修饰。&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;LPWSTR&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="17%"&gt;&#xD;
&lt;p align="left"&gt;wchar_t*&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="27%"&gt;&#xD;
&lt;p align="left"&gt;System.String 或 &amp;nbsp; System.Text.StringBuilder&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;用 Unicode 修饰。&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;LPCWSTR&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="17%"&gt;&#xD;
&lt;p align="left"&gt;Const wchar_t*&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="27%"&gt;&#xD;
&lt;p align="left"&gt;System.String 或 &amp;nbsp; System.Text.StringBuilder&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;用 Unicode 修饰。&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;FLOAT&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="17%"&gt;&#xD;
&lt;p align="left"&gt;Float&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="27%"&gt;&#xD;
&lt;p align="left"&gt;System.Single&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;32 位&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;DOUBLE&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="17%"&gt;&#xD;
&lt;p align="left"&gt;Double&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="27%"&gt;&#xD;
&lt;p align="left"&gt;System.Double&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top"&gt;&#xD;
&lt;p align="left"&gt;64 位&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chuncn/aggbug/2294096.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chuncn/archive/2011/12/20/2294096.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chuncn/archive/2011/12/10/2283596.html</id><title type="text">Apple Mac Os 10.6 雪豹--VirtualBox+AMD CPU</title><summary type="text">一、PC环境配置(本文的测试环境) 操作系统：Windows 7 x64 虚拟机：VirtualBox 4.1.6 CPU：AMD K12 Athlon II X4 631四核 内存：金士顿 DDR3 1333 4G x 2 主板：技嘉GA-A55-S3P(AMD K12) 显卡：NVIDIA GeForce 210(1GB) 声卡：瑞昱ALC 887 高保真音频 网卡：瑞昱RTL8168E PCI-E Gigabit Ethernet NIC/技嘉二、相关资源的下载 查看CPU是否支持虚拟化技术的软件：Securable 虚拟机软件：VirtualBox Apple ...</summary><published>2011-12-10T14:06:00Z</published><updated>2011-12-10T14:06:00Z</updated><author><name>chuncn</name><uri>http://www.cnblogs.com/chuncn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chuncn/archive/2011/12/10/2283596.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chuncn/archive/2011/12/10/2283596.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: 宋体;"&gt;&lt;strong&gt;一、PC环境配置(本文的测试环境)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;　　操作系统：Windows 7 x64&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;　　虚拟机：VirtualBox 4.1.6 &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;　　CPU：AMD&amp;nbsp; K12 Athlon II X4 631四核&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;　　内存：金士顿 DDR3 1333 4G x 2&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;　　主板：技嘉GA-A55-S3P(AMD K12)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;　　显卡：NVIDIA GeForce 210(1GB)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;　　声卡：瑞昱ALC 887 高保真音频&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;　　网卡：瑞昱RTL8168E PCI-E Gigabit Ethernet NIC/技嘉&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;&lt;strong&gt;二、相关资源的下载&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;　　查看CPU是否支持虚拟化技术的软件：&lt;a href="http://bbs.weiphone.com/job-htm-action-download-pid-tpc-tid-1554826-aid-1561615.html" target="_blank"&gt;Securable&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;　　虚拟机软件：&lt;a href="http://www.virtualbox.org/wiki/Downloads" target="_blank"&gt;VirtualBox&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;　　Apple Mac OS  X：Snow Leopard Universal 10.6(432)GM (&lt;a href="http://www.verycd.com/topics/2765539/" target="_blank"&gt;下载地址1&lt;/a&gt;，&lt;a href="http://www.verycd.com/topics/2778507" target="_blank"&gt;下载地址2&lt;/a&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;　　启动盘：&lt;a href="http://www.mediafire.com/?o1egnkn2jxz" target="_blank"&gt;LegacyBootCD.iso (EmpireEFI1085_AMD.zip)&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;不同类型的CPU需要下载对应的启动盘镜像文件，请参考 &lt;a style="line-height: 22px;" href="http://prasys.info/2010/01/empire-efi-v-1-085-is-out/" target="_blank"&gt;Empire EFI v 1.085 is out&lt;/a&gt; 页面的详细说明。&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;&lt;strong&gt;三、安装步骤&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div style="line-height: 22px;"&gt;&lt;span style="line-height: 22px; font-family: 宋体;"&gt;&lt;strong&gt;1、开启CPU的虚拟化技术支持&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 虚拟机安装Mac  OS系统须CPU支持虚拟技术，故需先测试CPU是否已经开启虚拟技术，如果还未开启则需先开启；如果CPU不支持虚拟技术，本文基本上就不适用了。这时可以参考网上说的使用  VMLite 的另类安装方法，这个就没试过了。&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;　　运行上面下载的 Securable.exe 文件，界面如下：&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&lt;img style="margin: 0pt 10px 0pt 0pt;" src="http://hiphotos.baidu.com/freeuser/pic/item/487b3136427ef4bca2cc2bc2.jpg" alt="" /&gt;&lt;/div&gt;&#xD;
&lt;span style="font-family: 宋体;"&gt;&amp;nbsp;&amp;nbsp;   当测试结果显示为&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;&amp;ldquo;Hardware Virtualization  YES&amp;rdquo;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;或者&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;&amp;ldquo;Hardware Virtualization Locked On&amp;rdquo;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;之类的字眼就证明已经开启了CPU的虚拟技术支持了。我使用的是华硕m4a88t-m主板，bois中需要将  Advanced/Secure Virtual Machine Mode 的值设置为Enabled （默认是Disabled）。&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;&lt;strong&gt;2、新建 VirtualBox 虚拟机&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;&amp;nbsp;&amp;nbsp; 新建的虚拟机，操作系统选择 Mac OS X，操作系统版本选择 Mac OS X  Server，内存不小于1024MB，硬盘大小不小于20GB即可，参考下图：&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&lt;img style="margin: 0pt 10px 0pt 0pt;" src="http://hiphotos.baidu.com/freeuser/pic/item/9dbe06d97fc1db8838012fc2.jpg" alt="" /&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;&lt;strong&gt;3、编辑新建的虚拟机配置&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 打开虚拟机的配置页面，设置如下几项：&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;&amp;ldquo;系统/主板/启动顺序&amp;rdquo;设置为光驱排头、硬盘第二，&amp;ldquo;&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;系统/主板/&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;扩展特征&amp;rdquo;中将&amp;ldquo;启用  EFI&amp;rdquo;禁用；&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;&amp;ldquo;显示/显卡/显存大小&amp;rdquo;调到最大128MB，&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;&amp;ldquo;显示/显卡/&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;扩展特征&amp;rdquo;中将&amp;ldquo;启用3D加速&amp;rdquo;启用；&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;&amp;ldquo;Storage/存储树&amp;rdquo;中添加上面下载的  LegacyBootCD.iso 镜像文件到第一启动光驱；&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 截图参考如下：&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&lt;img style="margin: 0pt 10px 0pt 0pt;" src="http://hiphotos.baidu.com/freeuser/pic/item/b3627be9cdd0fb5eb90e2dc2.jpg" alt="" /&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;&lt;strong&gt;4、启动新建的虚拟机&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;&amp;nbsp;&amp;nbsp; 启动上面配置好的虚拟机，等待一会后，将启动到如下界面：&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&lt;img style="margin: 0pt 10px 0pt 0pt;" src="http://hiphotos.baidu.com/freeuser/pic/item/07735b3f4edfa18d55e723c2.jpg" alt="" /&gt;&lt;/div&gt;&#xD;
　　此时鼠标右键点击右下角的光驱图标，卸载 LegacyBootCD.iso 后再加载上面下载的 Snow Leopard Universal 10.6(432)GM 对应的dmg镜像文件。dmg文件选择后，按 F5 键后，界面中的 Legacy EmpireEFI 图标将变为 Mac OS X Install DVD 图标,如下：&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&lt;img style="margin: 0pt 10px 0pt 0pt;" src="http://hiphotos.baidu.com/freeuser/pic/item/9346238255660ac30df4d2c2.jpg" alt="" /&gt;&lt;/div&gt;&#xD;
　　此时按回车键，待那个青蛙界面过后就可以进入系统的安装界面了。&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&lt;img style="margin: 0pt 10px 0pt 0pt;" src="http://hiphotos.baidu.com/freeuser/pic/item/867c01ecac36ecb02e2e21c2.jpg" alt="" /&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&lt;img style="margin: 0pt 10px 0pt 0pt;" src="http://hiphotos.baidu.com/freeuser/pic/item/8cc5aaa2e525ebcccaefd0c2.jpg" alt="" /&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div&gt;&lt;strong&gt;&lt;span style="font-family: 宋体;"&gt;5、&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;开始安装 Mac OS X&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;　　直到安装到如下界面，由于硬盘没格式化，需要进行处理：&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&lt;img style="margin: 0pt 10px 0pt 0pt;" src="http://hiphotos.baidu.com/freeuser/pic/item/32864bad203eac684a36d6c2.jpg" alt="" /&gt;&lt;/div&gt;&#xD;
&lt;span style="font-family: 宋体;"&gt;　　此时点击顶部的&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;菜单&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;&amp;ldquo;实用工具/磁盘工具...&amp;rdquo;，对硬盘按如下图执行抹掉操作，然后点击&lt;/span&gt;&lt;span style="line-height: 22px; font-family: 宋体;"&gt;顶部的&lt;/span&gt;&lt;span style="line-height: 22px; font-family: 宋体;"&gt;菜单&lt;/span&gt;&lt;span style="line-height: 22px; font-family: 宋体;"&gt;&amp;ldquo;磁盘工具/退出磁盘工具&amp;rdquo;。&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&lt;img style="margin: 0pt 10px 0pt 0pt;" src="http://hiphotos.baidu.com/freeuser/pic/item/6a954cd1d5ff63599a5027c2.jpg" alt="" /&gt;&lt;/div&gt;&#xD;
&lt;span style="line-height: 22px; font-family: 宋体;"&gt;　　此时就可以看到可选的硬盘了，如下图所示，选中后按继续按钮开始漫长的安装过程，大约需要30分钟：&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&lt;img style="margin: 0pt 10px 0pt 0pt;" src="http://hiphotos.baidu.com/freeuser/pic/item/f59d0c09a6e776ce2fddd4c2.jpg" alt="" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img style="margin: 0pt 10px 0pt 0pt;" src="http://hiphotos.baidu.com/freeuser/pic/item/115cc338678195a3d46225c2.jpg" alt="" /&gt;&lt;/div&gt;&#xD;
&lt;span style="line-height: 22px; font-family: 宋体;"&gt;　　安装完毕后将看到如下界面：&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&lt;img style="margin: 0pt 10px 0pt 0pt;" src="http://hiphotos.baidu.com/freeuser/pic/item/7544d6afc10c79ad7dd92ac2.jpg" alt="" /&gt;&lt;/div&gt;&#xD;
&lt;span style="line-height: 22px; font-family: 宋体;"&gt;　　虽然提示安装失败，但其实已经成功安装完毕了。在这个界面将右下角的光驱重新加载为&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;LegacyBootCD.iso，然后重新启动虚拟机（可能需要先强制关闭虚拟机），重新启动后的界面如下图：&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&lt;img style="margin: 0pt 10px 0pt 0pt;" src="http://hiphotos.baidu.com/freeuser/pic/item/42abf710f238e360203f2ec2.jpg" alt="" /&gt;&lt;/div&gt;&#xD;
&lt;span style="font-family: 宋体;"&gt;　　启动菜单中已经多出了  MacOSX 选项，选中后回车就可正常启动到 Mac OS X 系统了。首次启动到 Mac OS X  会要求填写一些基本的信息、创建帐号等，最后将到达Mac的桌面了，如下图所示：&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img style="margin: 0pt 10px 0pt 0pt;" src="http://hiphotos.baidu.com/freeuser/pic/item/a52235c22bb35f54e4dd3bc2.jpg" alt="" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;　　至此Mac  OS X系统安装完毕！ &lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;VirtualBox设置注意：&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;　　常用-基本-版本Mac OS Server(64 bit)&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;　　系统-主板-启动顺序勾选&amp;ldquo;光驱&amp;rdquo;、&amp;ldquo;硬盘&amp;rdquo;；扩展特性勾选&amp;ldquo;启用 IO APIC&amp;rdquo;、&amp;ldquo;Enable absolute pointing device&amp;rdquo;,&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;不勾选&amp;ldquo;启用EFI(只针对某些操作系统)&amp;rdquo;和&amp;ldquo;Hardware clock in UTC time&amp;rdquo;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;　　　　-硬件加速-硬件虚拟-勾选&amp;ldquo;启用VT-x/AMD-V&amp;rdquo;、&amp;ldquo;启用Nested Paging&amp;rdquo;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;　　显示-显卡-显存大小调到最大（128MB）;扩展特性勾选&amp;ldquo;启用3D加速&amp;rdquo;。&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;引导注意：&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;　　LegacyBootCD引导后如进入到命令行&amp;ldquo;Shell&amp;gt;&amp;rdquo;，注意"&lt;span style="font-family: 宋体;"&gt;VirtualBox设置注意&lt;/span&gt;"；引导并开始安装系统如长时间出现青蛙画面，则退出虚拟机，重新操作一遍即可。&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;　&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;其它：&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;　　进入系统后，进入腾迅主页下载QQ，百度搜索一下"Chinaese BP"(五笔输入法)，用上一会儿，熟悉一下，况且当是新的windows，过过新鲜感吧，虽然也就一阵子。新的系统，感觉是少了点&lt;/span&gt;&lt;span style="font-family: 宋体;"&gt;什么，比如开发工具，可xcode太大、一下下载不了，只能够下一回合再摸上一摸了。&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;　　需要续传下载，可以安装个mac版迅雷，地址是&lt;a href="http://www.chinamac.com/download/mac8980.html"&gt;http://www.chinamac.com/download/mac8980.html&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="font-family: 宋体;"&gt;　　&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;驱动：&lt;/div&gt;&#xD;
&lt;div&gt;　　&lt;a href="http://www.son1c.cn/show/350.html"&gt;http://www.son1c.cn/show/350.html&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/chuncn/aggbug/2283596.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chuncn/archive/2011/12/10/2283596.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chuncn/archive/2011/12/07/2279825.html</id><title type="text">win32中调用Atl控件</title><summary type="text">问了多位c++程序员，win32群里的朋友如何在Win32中调用Atl控件，也游了开源网站一回，均无结果，按照微软msdn给出的步骤也没有搞定。搜索引擎找了无数篇文件，终于找到可行的方法，故记录于此。第一步、创建Win32 Project项目，Application Settings窗口中勾选“ATL”第二步、添加引用#pragma comment(lib, &amp;quot;atl.lib&amp;quot;)//#include &amp;lt;atldef.h&amp;gt;//#include &amp;lt;atliface.h&amp;gt;//#define _ATL_DLL_IMPL//using namespace AT</summary><published>2011-12-07T12:08:00Z</published><updated>2011-12-07T12:08:00Z</updated><author><name>chuncn</name><uri>http://www.cnblogs.com/chuncn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chuncn/archive/2011/12/07/2279825.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chuncn/archive/2011/12/07/2279825.html"/><content type="html">&lt;p&gt;问了多位c++程序员，win32群里的朋友如何在Win32中调用Atl控件，也游了开源网站一回，均无结果，按照微软msdn给出的步骤也没有搞定。搜索引擎找了无数篇文件，终于找到可行的方法，故记录于此。&lt;/p&gt;&#xD;
&lt;p&gt;第一步、创建Win32 Project项目，Application Settings窗口中勾选&amp;ldquo;ATL&amp;rdquo;&lt;/p&gt;&#xD;
&lt;p&gt;第二步、添加引用&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;#pragma comment(lib, "atl.lib")&#xD;
//#include &amp;lt;atldef.h&amp;gt;&#xD;
//#include &amp;lt;atliface.h&amp;gt;&#xD;
//#define _ATL_DLL_IMPL&#xD;
//using namespace ATL&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;第三步、调用ATL&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;//&amp;ldquo;{}&amp;rdquo;中为被调用Atl控件的guid&lt;/pre&gt;&#xD;
&lt;pre &gt;CComModule _Module;&#xD;
_Module.Init(NULL, hInst);&#xD;
HWND hWnd1 = CreateWindow("AtlAxWin", "",WS_CHILD|WS_VISIBLE|WS_OVERLAPPEDWINDOW, 10, 10,300, 300,&#xD;
	hWnd, NULL, hInst, NULL );&#xD;
USES_CONVERSION;&#xD;
CComPtr&amp;lt;IUnknown&amp;gt; spUnk;&#xD;
CoInitialize(spUnk);&#xD;
HRESULT hRet = AtlAxCreateControl(T2COLE("{FCB4D80C-E22E-41AB-8C0F-0E7B9377B6F8}"), hWnd, NULL, &amp;amp;spUnk);&#xD;
//if(FAILED(hRet))&#xD;
//	return -1;&#xD;
//_Module.Terminate();&#xD;
_Module.Term();&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;其它方式（调用未成功）&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;#include &amp;lt;atlbase.h&amp;gt;&#xD;
#include &amp;lt;atlwin.h&amp;gt;&#xD;
CAxWindow wnd;&#xD;
RECT rect = {240,240,240,240};&#xD;
HWND hh= wnd.Create(hWnd, rect, "{FCB4D80C-E22E-41AB-8C0F-0E7B9377B6F8}",WS_CHILD|WS_VISIBLE,NULL,0U,NULL); &#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;其它方式（调用未成功）&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;CreateAxControl&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;参考资料&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://support.microsoft.com/kb/218442/EN-US"&gt;http://support.microsoft.com/kb/218442/EN-US&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.codeguru.com/cpp/com-tech/atl/activex/article.php/c69"&gt;http://www.codeguru.com/cpp/com-tech/atl/activex/article.php/c69&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://support.microsoft.com/kb/192560"&gt;http://support.microsoft.com/kb/192560&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/zh-CN/windowssdk/thread/88a981ea-8125-4917-a45e-87cfbc7fd1dd"&gt;http://social.msdn.microsoft.com/Forums/zh-CN/windowssdk/thread/88a981ea-8125-4917-a45e-87cfbc7fd1dd&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://tieba.baidu.com/f?kz=1123748307"&gt;http://tieba.baidu.com/f?kz=1123748307&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chuncn/aggbug/2279825.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chuncn/archive/2011/12/07/2279825.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chuncn/archive/2011/12/02/2272368.html</id><title type="text">html5的迷人之处</title><summary type="text">移动互联网领域，随着Adobo放弃flash、转投html5以及微软Silveright仅发展到5.0版，注定了html5将成为新的热门，虽然尚需要一段时间。第一，html5是在已有技术基础之上的新版本，上手较苹果、c++容易得多，且性能接近桌面应用。其二，html5只要有个记事本和支持它的浏览器就可以开发、调试和运行，简化了对特定环境的依赖，和诸如编译之类的等待过程。第三，html5不仅可以在支持它的浏览器，包括PC和移动设备，上面跑起来，也可以在桌面上像桌面应该一样跑起来，甚至让你认为它就是桌面应用。第四，无须交费成为商店会员，还要通过认证才能够发布应用，省去很多麻烦。众所周知，应用商..</summary><published>2011-12-02T09:00:00Z</published><updated>2011-12-02T09:00:00Z</updated><author><name>chuncn</name><uri>http://www.cnblogs.com/chuncn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chuncn/archive/2011/12/02/2272368.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chuncn/archive/2011/12/02/2272368.html"/><content type="html">&lt;p&gt;移动互联网领域，随着Adobo放弃flash、转投html5以及微软Silveright仅发展到5.0版，注定了html5将成为新的热门，虽然尚需要一段时间。&lt;/p&gt;&#xD;
&lt;p&gt;第一，html5是在已有技术基础之上的新版本，上手较苹果、c++容易得多，且性能接近桌面应用。&lt;/p&gt;&#xD;
&lt;p&gt;其二，html5只要有个记事本和支持它的浏览器就可以开发、调试和运行，简化了对特定环境的依赖，和诸如编译之类的等待过程。&lt;/p&gt;&#xD;
&lt;p&gt;第三，html5不仅可以在支持它的浏览器，包括PC和移动设备，上面跑起来，也可以在桌面上像桌面应该一样跑起来，甚至让你认为它就是桌面应用。&lt;/p&gt;&#xD;
&lt;p&gt;第四，无须交费成为商店会员，还要通过认证才能够发布应用，省去很多麻烦。众所周知，应用商店（特别是app store)有一定门槛的，不符合规定意味着无法发布；android商店除了有官方的也还有很多地区的、各种各样的，而且要成为会员到发布，门槛多多，不容易。金融时报为此，就曾下架其在app store上的应用，改用html5，因此短时间积累了大量的用户，大赚一笔;全球最大婚恋网站之一Match.com的iOS应用，理由是该应用允许用户通过一个网页绕开苹果应用内支付使用信用卡直接付帐，这意味着苹果无法从支付中取得30%的分成。&lt;/p&gt;&#xD;
&lt;p&gt;如何将html5包装成桌面应用？&lt;/p&gt;&#xD;
&lt;p&gt;初中末期，就有把html当做桌面应用来玩，很简单的，把扩展名改为.hta即可。内容可以用htm5来写，但可惜调用的内核用的是ie的，所以webgl等微软不支持的部分无法使用。&lt;/p&gt;&#xD;
&lt;p&gt;总之，一个新事情，若能够达到甚至超越已有事物所能够带来的，同时简介其实现的过程，那没有不受欢迎的，最终到底如何，试目（用）以试吧！&lt;/p&gt;&#xD;
&lt;p&gt;最后介绍几个html5相关的框架：&lt;/p&gt;&#xD;
&lt;p&gt;Appcelerator &lt;a href="http://www.oschina.net/p/appcelerator"&gt;http://www.oschina.net/p/appcelerator&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;PhoneGap &lt;a href="http://phonegap.com/"&gt;http://phonegap.com/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;weinre&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chuncn/aggbug/2272368.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chuncn/archive/2011/12/02/2272368.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chuncn/archive/2011/12/02/2272063.html</id><title type="text">silveright使用配置文件-转</title><summary type="text">首先，在工程中创建一个XML文件，可以取名为app.config。 记得放在工程的根目录，方便后面设置路径。把Build Action设成Resource，关于Build Action的说明可以在这里找到。 随便在app.config中写点东西 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt; &amp;lt;configuration&amp;gt; &amp;lt;appSettings&amp;gt; &amp;lt;add key=&amp;quot;name&amp;quot; value=&amp;quot;srzhz&amp;quot;/&amp;gt; &amp;lt;add key</summary><published>2011-12-02T06:23:00Z</published><updated>2011-12-02T06:23:00Z</updated><author><name>chuncn</name><uri>http://www.cnblogs.com/chuncn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chuncn/archive/2011/12/02/2272063.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chuncn/archive/2011/12/02/2272063.html"/><content type="html">&lt;div &gt;&#xD;
&lt;pre &gt;首先，在工程中创建一个XML文件，可以取名为app.config。&#xD;
 &#xD;
　　记得放在工程的根目录，方便后面设置路径。把Build Action设成Resource，关于Build Action的说明可以在这里找到。&#xD;
 &#xD;
　　随便在app.config中写点东西&#xD;
 &#xD;
&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&#xD;
 &#xD;
&amp;lt;configuration&amp;gt;&#xD;
 &#xD;
  &amp;lt;appSettings&amp;gt;&#xD;
 &#xD;
    &amp;lt;add key="name" value="srzhz"/&amp;gt;&#xD;
 &#xD;
    &amp;lt;add key="university" value="Tsinghua University"/&amp;gt;&#xD;
 &#xD;
  &amp;lt;/appSettings&amp;gt;&#xD;
 &#xD;
&amp;lt;/configuration&amp;gt;&#xD;
 &#xD;
　　然后要开始创建这个ConfigurationManager类了。&#xD;
 &#xD;
　　首先在工程上按右键点击Add Reference，之后选择System.Xml.Linq。(如果没加的话无法引入命名空间System.Xml.Linq)&#xD;
 &#xD;
　　然后在ConfigurationManager类中写入如下代码&#xD;
 &#xD;
using System;&#xD;
 using System.Windows;&#xD;
 using System.Collections.Generic;&#xD;
 using System.Windows.Resources;&#xD;
 using System.IO;&#xD;
 using System.Xml.Linq;&#xD;
 using System.Reflection;&#xD;
 &#xD;
namespace Model&#xD;
 {&#xD;
     /// &amp;lt;summary&amp;gt;&#xD;
 &#xD;
    /// Access appSettings from a configuration file&#xD;
 &#xD;
    /// &amp;lt;/summary&amp;gt;&#xD;
 &#xD;
    /// &amp;lt;remarks&amp;gt;Your appConfig file must be in the root of your applcation&amp;lt;/remarks&amp;gt;&#xD;
 &#xD;
    public static class ConfigurationManager&#xD;
     {&#xD;
         static ConfigurationManager()&#xD;
         {&#xD;
             AppSettings = new Dictionary&amp;lt;string, string&amp;gt;();&#xD;
             ReadSettings();&#xD;
         }&#xD;
 &#xD;
        public static Dictionary&amp;lt;string, string&amp;gt; AppSettings { get; set; }&#xD;
         private static void ReadSettings()&#xD;
         {&#xD;
             // Get the name of the executing assemby - we are going to be looking in the root folder for&#xD;
             // a file called app.config&#xD;
             string assemblyName = Assembly.GetExecutingAssembly().FullName;&#xD;
             assemblyName = assemblyName.Substring(0, assemblyName.IndexOf(','));&#xD;
             string url = String.Format("{0};component/app.config", assemblyName);&#xD;
             StreamResourceInfo configFile = Application.GetResourceStream(new Uri(url, UriKind.Relative));&#xD;
             if (configFile != null &amp;amp;&amp;amp; configFile.Stream != null)&#xD;
             {&#xD;
                 Stream stream = configFile.Stream;&#xD;
                 XDocument document = XDocument.Load(stream);&#xD;
                 foreach (XElement element in document.Descendants("appSettings").DescendantNodes())&#xD;
                 {&#xD;
                     AppSettings.Add(element.Attribute("key").Value, element.Attribute("value").Value);&#xD;
                 }&#xD;
             }&#xD;
         }&#xD;
     }&#xD;
 }&#xD;
 &#xD;
　　之后你就可以通过调用这个类来获得配置信息了。例如：&#xD;
 &#xD;
String name = ConfigurationManager.AppSettings["name"];&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Build Action为Content的文件读取方式为：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;//Uri uri = new Uri("/SilverlightApplication7;component/remark.txt", UriKind.Relative);&lt;br /&gt;            Uri uri = new Uri("app.config", UriKind.Relative);&#xD;
            StreamResourceInfo sri = Application.GetResourceStream(uri);&#xD;
            System.IO.StreamReader reader = new System.IO.StreamReader(sri.Stream);&#xD;
            MessageBox.Show(reader.ReadToEnd());&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chuncn/aggbug/2272063.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chuncn/archive/2011/12/02/2272063.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
