﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Titan专栏-文章分类-C#技术</title><link>http://www.blogjava.net/Titan/category/6701.html</link><description>用文字来整理生命</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:33:09 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:33:09 GMT</pubDate><ttl>60</ttl><item><title>C#使用技巧--调用DLL</title><link>http://www.blogjava.net/Titan/articles/30299.html</link><dc:creator>Titan</dc:creator><author>Titan</author><pubDate>Sat, 11 Feb 2006 14:22:00 GMT</pubDate><guid>http://www.blogjava.net/Titan/articles/30299.html</guid><wfw:comment>http://www.blogjava.net/Titan/comments/30299.html</wfw:comment><comments>http://www.blogjava.net/Titan/articles/30299.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Titan/comments/commentRss/30299.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Titan/services/trackbacks/30299.html</trackback:ping><description><![CDATA[<SPAN class=Contents>使用C#时不免用调用别的DLL，如WIN32的API和自己以前做的DLL， <BR>C#调用DLL很像VB，下面讨论的C#调用DLL的方式。 <BR>看看下面的例子，演示了怎么定义DLL函数接口 <BR>public class Utility <BR>{ <BR>&nbsp;&nbsp;&nbsp;[DllImport("kernel32", <BR>EntryPoint=”CreateDirectory”, <BR>CallingConvention=CallingConvention.StdCall] <BR>&nbsp;&nbsp;&nbsp;public static extern bool Create (string name); <BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;[DllImport("User32"] <BR>EntryPoint=”MessageBox”, <BR>CallingConvention=CallingConvention.StdCall] <BR>&nbsp;&nbsp;&nbsp;public static extern int MsgBox (string msg); <BR>} <BR>&nbsp;&nbsp;<BR>class MyClass <BR>{ <BR>&nbsp;&nbsp;&nbsp;public static int Main() <BR>&nbsp;&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string myString; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Write("Enter your message: "); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myString = Console.ReadLine(); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return Utility.MsgBox(myString); <BR>&nbsp;&nbsp;&nbsp;} <BR>} <BR>&nbsp;&nbsp;<BR>值得注意的是，缺省的调用规则(CallingConvention)是Stdcall，同Winapi，在 <BR>C++里是__stdcall的形式，函数入口(EntryPoint)缺省是同名，如CreateDirectory <BR>的定义也可以为 <BR>&nbsp;&nbsp;&nbsp;[DllImport("kernel32")] <BR>&nbsp;&nbsp;&nbsp;static extern bool CreateDirectory(string name, SecurityAttributes sa); <BR>&nbsp;&nbsp;<BR>WIN32 API原型为 <BR>BOOL CreateDirectory( <BR>&nbsp;&nbsp;LPCTSTR lpPathName,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// directory name <BR>&nbsp;&nbsp;LPSECURITY_ATTRIBUTES lpSecurityAttributes&nbsp;&nbsp;// SD <BR>); <BR>&nbsp;&nbsp;<BR>在调用WIN32 API时注意那些类型的转换，如结构(struct)、指针(pointer)， <BR><BR>有关各种语言之间类型转换和DllImport属性的详细信息可以参考SDK文档&nbsp; </SPAN><img src ="http://www.blogjava.net/Titan/aggbug/30299.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Titan/" target="_blank">Titan</a> 2006-02-11 22:22 <a href="http://www.blogjava.net/Titan/articles/30299.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>