1。编写DLL
    a)文件--打开--新建项目--Win32,右侧Win32项目,填写好项目名称,点击“下一步”,
       应用程序类型选择:“DLL(D)”,附加选项:空项目(E),然后完成。
    b)编写头文件(edrlib.h):
 #ifdef __cplusplus
#ifdef __cplusplus   
 #define EXPORT extern "C" __declspec (dllexport)
#define EXPORT extern "C" __declspec (dllexport)   
 #else
#else   
 #define EXPORT __declspec (dllexport)
#define EXPORT __declspec (dllexport)   
 #endif
#endif   
 
   
 EXPORT void  EdrCenterTextA();
EXPORT void  EdrCenterTextA();   
 EXPORT void  EdrCenterTextW();
EXPORT void  EdrCenterTextW();   
 EXPORT int  IncCounter();
EXPORT int  IncCounter();   
 #ifdef UNICODE
#ifdef UNICODE   
 #define EdrCenterText EdrCenterTextW
#define EdrCenterText EdrCenterTextW   
 #else
#else   
 #define EdrCenterText EdrCenterTextA
#define EdrCenterText EdrCenterTextA   
 #endif
#endif  注解:
    i. 定义 __cplusplus表示是供C++程序中调用。
    ii.__declspec (dllexport)表示函数调用方式,此处表示VS2008工程属性调用的默认方式。更改方法:
    右击项目--属性--配置属性--C/C++--高级,更改右侧“调用约定”。
    c)编写DLL文件(edrlib.cpp):
 #include "windows.h"
#include "windows.h"   
 #include "edrlib.h"
#include "edrlib.h"   
 //counter供调用该DLL的所有应用程序共享
//counter供调用该DLL的所有应用程序共享   
 #pragma data_seg("shared")
#pragma data_seg("shared")   
 int counter=0;
int counter=0;   
 #pragma comment(linker,"/SECTION:shared,RWS")
#pragma comment(linker,"/SECTION:shared,RWS")   
 
   
 int WINAPI DllMain(_In_ HANDLE _HDllHandle, _In_ DWORD _Reason, _In_opt_ LPVOID _Reserved)
int WINAPI DllMain(_In_ HANDLE _HDllHandle, _In_ DWORD _Reason, _In_opt_ LPVOID _Reserved)   


 {
{   
 return TRUE;
    return TRUE;   
 }
}   
 
   
 EXPORT void   EdrCenterTextA()
EXPORT void   EdrCenterTextA()   


 {
{   
 MessageBox(NULL,TEXT("调用DLL函数!"),TEXT("ASSIC版本"),MB_OK);
    MessageBox(NULL,TEXT("调用DLL函数!"),TEXT("ASSIC版本"),MB_OK);   
 
       
 }
}   
 EXPORT void  EdrCenterTextW()
EXPORT void  EdrCenterTextW()   


 {
{   
 MessageBox(NULL,TEXT("调用DLL函数!"),TEXT("UNICODE版本"),MB_OK);
    MessageBox(NULL,TEXT("调用DLL函数!"),TEXT("UNICODE版本"),MB_OK);   
 
   
 }
}   
 
   
 EXPORT int  IncCounter()
EXPORT int  IncCounter()   


 {
{   
 return ++counter;
    return ++counter;   
 }
}    c)编译生成DLL。
2。调用DLL
   方法一、
   1。新建Win32应用程序空项目。
   2。把生成的dll、lib这2个文件复制到新建的目录下。
   3。添加导入库:工具--项目和解决方案--VC++目录,选择右侧“显示以下内容的目录”下的“库文件”,把lib所在目录添加。
   4。头文件:edrlib.h(与编写DLL中一样)
   5。源文件:main.c

 /**//*#define cplusplus*/ //c++调用方式
/**//*#define cplusplus*/ //c++调用方式   
 #include "windows.h"
#include "windows.h"   
 #include "edrlib.h"
#include "edrlib.h"   
 #pragma comment(lib,"edrlib.lib")
#pragma comment(lib,"edrlib.lib")   
 
   
 int WINAPI WinMain(__in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
int WINAPI WinMain(__in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )   


 {
{   
 
   
 TCHAR buf[32];
    TCHAR buf[32];   
 wsprintf(buf,L"now,counter=%i",IncCounter());
    wsprintf(buf,L"now,counter=%i",IncCounter());   
 MessageBox(NULL,buf,L"--",MB_OK);
    MessageBox(NULL,buf,L"--",MB_OK);   
 EdrCenterText();
    EdrCenterText();   
 return 0;
    return 0;   
 }
}  

解释: 
   可注释#pragma comment(lib,"TestDLL2.lib")这条,但必须设置链接库,方法:
   右击项目--属性--配置属性--链接器--输入--附加依赖项:edrlib.lib
  6.运行测试成功。
【以上内容转自:http://blog.csdn.net/breezes2008/archive/2010/02/25/5326861.aspx】
3、在C#中调用DLL
此示例使用 C 程序创建一个 DLL,在下一示例中将从 C# 程序调用该 DLL。
   
// cmdll.c// Compile with: /LDint __declspec(dllexport) SampleMethod(int i){   return i*10;} 
  如果是Web项目,把DLL复制到bin目录下。
  如果是桌面程序,把DLL复制到可执行行文件目录下。
引用代码:

 using System;using System.Runtime.InteropServices;public class MainClass
using System;using System.Runtime.InteropServices;public class MainClass  {   [DllImport("Cmdll.dll")]   public static extern int SampleMethod(int x);   static void Main()
{   [DllImport("Cmdll.dll")]   public static extern int SampleMethod(int x);   static void Main()     {      Console.WriteLine("SampleMethod() returns {0}.", SampleMethod(5));   }}
{      Console.WriteLine("SampleMethod() returns {0}.", SampleMethod(5));   }}
from:http://apps.hi.baidu.com/share/detail/33471191
	posted on 2011-05-08 10:41 
mr_chen 阅读(3619) 
评论(1)  编辑 收藏 引用  所属分类: 
C#开发笔记