黄永泰:潜心研究和实践.NET/数据库相关技术的应用;

关注NBA,酷爱乡村音乐;微博:http://t.sina.com/oldyongs。

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  25 随笔 :: 0 文章 :: 81 评论 :: 0 引用

2011年6月28日 #

    很多C#的书都没讲到extern修饰符的使用,查了一下MSDN,整理出来存档。

 

    extern 修饰符用于声明在外部实现的方法。 extern 修饰符的常见用法是在使用 Interop 服务调入非托管代码时与 DllImport 特性一起使用。 在这种情况下,还必须将方法声明为 static,如下示例所示:

[DllImport("avifil32.dll")]

private static extern void AVIFileInit();

 

注意:

1extern 关键字还可以定义外部程序集别名,使得可以从单个程序集中引用同一组件的不同版本。

2、将 abstract extern 修饰符一起使用来修改同一成员是错误的。 使用 extern 修饰符意味着方法在 C# 代码的外部实现,而使用 abstract 修饰符意味着在类中未提供方法实现。

3extern 关键字在使用上比在 C++ 中有更多限制。

 

示例:

在该示例中,程序接收来自用户的字符串并将该字符串显示在消息框中。程序使用从 User32.dll 库导入的 MessageBox 方法。

 

using System;

using System.Runtime.InteropServices;

class MainClass

{

   [DllImport("User32.dll")]

   public static extern int MessageBox(int h, string m, string c, int type);

 

   static int Main()

   {

      string myString;

      Console.Write("Enter your message: ");

      myString = Console.ReadLine();

      return MessageBox(0, myString, "My Message Box", 0);

   }

}

 

此示例使用 C 程序创建一个 DLL,在下一示例中将从 C# 程序调用该 DLL

 

// cmdll.c

// compile with: /LD

int __declspec(dllexport) SampleMethod(int i)

{

   return i*10;

}

 

该示例使用两个文件 CM.cs Cmdll.c 来说明 externC 文件是示例 2 中创建的外部 DLL,它从 C# 程序内调用。

 

// cm.cs

using System;

using System.Runtime.InteropServices;

public class MainClass

{

   [DllImport("Cmdll.dll")]

   public static extern int SampleMethod(int x);

 

   static void Main()

   {

      Console.WriteLine("SampleMethod() returns {0}.", SampleMethod(5));

   }

}

 

输出:

SampleMethod() returns 50.

 

备注:

生成项目:

使用 Visual C++ 命令行将 Cmdll.c 编译为 DLL

cl /LD Cmdll.c

使用命令行编译 CM.cs

csc CM.cs

这将创建可执行文件 CM.exe。运行此程序时,SampleMethod 将值 5 传递到 DLL 文件,该文件将此值乘以 10 返回。

 

参考自:http://msdn.microsoft.com/zh-cn/library/e59b22c5(v=vs.80).aspx

posted @ 2011-06-28 11:06 黄永泰 阅读(99) 评论(0) 编辑

2011年5月30日 #

    NET Framework 4 Client Profile 是 .NET Framework 4精简版。
    .NET Framework Client Profile 是完整版 .NET Framework 3.5 SP1 的子集,面向客户端应用程序。它提供 Windows Presentation Foundation (WPF)、Windows 窗体、Windows Communication Foundation (WCF) 和 ClickOnce 功能的简化子集。这可以为面向 .NET Framework Client Profile 的 WPF、Windows 窗体、WCF 和控制台应用程序实现快速部署方案。

    为什么要引入这个简化版本呢?

    1. 减少.NET Framework以及包还.NET Framework的应用程序的部署时间;
    2. 减少.NET Framework部署的失败;
    3. 减少.NET Framework在ISV软件的所占大小,从而给其软件更多的空间;
    4. 减少安装了.NET Framework Client Profile的系统受攻击的“界面”,因为Client Profille中部包括ASP.NET和一些服务器所要的组件;

    总之,就是Client Profile的Framework更小更精简,

    参考:
    1.http://www.pin5i.com/showtopic-27072.html
    2.http://msdn.microsoft.com/zh-cn/library/cc656912.aspx

posted @ 2011-05-30 11:32 黄永泰 阅读(272) 评论(0) 编辑

2011年5月6日 #

    《C#与.NET 4高级程序设计:第5版》http://product.china-pub.com/197981 这本书怎么样,买过的朋友告诉一下,谢谢!

    最近没什么好的.net的新书买,所以想买本回来看看。

    或者有什么其它好的.net新书,推荐一下,谢谢。。。

posted @ 2011-05-06 08:41 黄永泰 阅读(264) 评论(2) 编辑

2011年3月23日 #

    docxWord 2007的文件的格式,我们现在使用的大部分是Word 2003,为了几个文件我们又不想更换Word2003,怎么办呢?

    问题很容易解决,这是一个Word 2003兼容Word 2007的问题,下载并且安装Word 2007转换Word 2003文档的补丁包就可以搞定。

    现在有一个微软提供的一个转换工具很不错(Microsoft Office WordExcel PowerPoint 文件格式兼容包),我们就不用装2007也能打开docx格式的文件了,下载地址如下:

    http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=941b3470-3ae9-4aee-8f43-c6bb74cd1466 

    安装之后重启机器,问题基本就解决了,现在就可以识别出docx、docm格式的Word 2007文档,pptx、pptm、potx、potm、ppsx、ppsm格式的PowerPoint 2007文档,xlsbxlsxxlsmxltxxltm格式的Excel 2007文档等。

posted @ 2011-03-23 09:37 黄永泰 阅读(63) 评论(0) 编辑

2011年3月22日 #

        用Visual Studio.net 2003调试项目时,出现错误对话框,显示如下:
        试图运行项目时出错,无法启动调试。没有正确安装调试器,请运行安装程序安装或恢复调试器。
        解决方法如下:        
   1、在命令行中尝试重新注册mscordbi.dll(命令行输入:regsvr32 mscordbi.dll)文件,该文件位于(C:\WINNT\Microsoft.NET\Framework\v1.1.4322请找到你本机的这个对应的目录)。
   2、在命令行中尝试重新注册oleaut32.dll(命令行输入:regsvr32 oleaut32.dll)
   3、命令行中进入C:\Program Files\Common Files\Microsoft Shared\VS7Debug目录,运行命令:mdm.exe /regserver。
        以上运行的命令都是在visual studio .net 命令提示符中输入(最重要),并且要进入到上面所说的目录执行才有效(这个当然)。
        大部分问题都是因为mdm.exe被损坏了导致的,重新运行最后一条命令就行了。
posted @ 2011-03-22 10:56 黄永泰 阅读(64) 评论(0) 编辑

2011年3月12日 #

摘要: 一般情况下,我们定义的一个SqlParameter参数数组,如: SqlParameter[] parms = { new SqlParameter("@DateTime1", dtBegin), new SqlParameter("@DateTime2", dtEnd) };如果只给一个SqlCommand使用,这种情况的参数使用,不会出现异常,但如果该参数数组同时给两个Sqlcommand使用,就会出现如下异常: System.ArgumentException: 另一个SqlParameterCollection中已包含SqlParameter。 阅读全文
posted @ 2011-03-12 09:32 黄永泰 阅读(108) 评论(0) 编辑

2010年9月18日 #

摘要: 今天(2010-9-18)买了五本书:1、http://www.china-pub.com/196997 深入浅出WPF(china-pub首发)2、http://www.china-pub.com/196977 软件开发者路线图:从学徒到高手 [新品]3、http://www.china-pub.com/34712 软件架构设计(09年度畅销榜TOP50)4、http://www.china-p...阅读全文
posted @ 2010-09-18 11:18 黄永泰 阅读(39) 评论(0) 编辑

2010年9月1日 #

摘要: Visual Studio 2010 的默认界面如下:可以给它换肤,步骤如下:进入Visual Studio 2010的“工具-扩展管理器”菜单,进入界面如下图:选中 后,单击下载(因我的已经装,所以看不到“下载”字样),按提示下载安装后,多了一个“Theme”菜单,其中有多种风格可选,你还可以自定义风格,以下是应用了Wind...阅读全文
posted @ 2010-09-01 11:24 黄永泰 阅读(208) 评论(0) 编辑

2010年3月27日 #

摘要: 本人在用C#写一个自动升级程序(Windows Forms),该程序是与要升级的程序在同一个程序集中的,涉及到关键的多进程的代码,不知如何写,请有现成代码的朋友指点.谢谢.. 思路如下: 启动应用程序(如登录窗口),自动检测到有新版本存在,则高出升级窗口,根据提示进行升级, 1、怎么结束登录窗口,使得第2步的工作不会出错(升级需覆盖当前启动的程序)。 2、如何开启另一个进程,调用升级方法(如Upd...阅读全文
posted @ 2010-03-27 11:41 黄永泰 阅读(277) 评论(2) 编辑

2009年10月12日 #

摘要: 工作之余,观看NBA比赛,是一件很不错的事情,只不过多数的赛事都在上班时间的早上,不是很方便,如果是在晚上就好了.所以,每个星期天看NBA是一件很期待的事情. 支持掘金,支持”甜瓜”安东尼.以下为2009-10赛季掘金的赛程表,喜欢的朋友顶一下啦.http://data.sports.sohu.com/nba/nba_schedule.php?teamid=7&m=...阅读全文
posted @ 2009-10-12 17:24 黄永泰 阅读(15) 评论(0) 编辑