在VS2008环境下编写C语言DLL,并在C++和C#项目下调用

一、编写DLL

    a)文件--打开--新建项目--Win32,右侧Win32项目,填写好项目名称,点击“下一步”,

       应用程序类型选择:“DLL(D)”,附加选项:空项目(E),然后完成。

    b)编写头文件(edrlib.h):

#ifdef __cplusplus   
#define  EXPORT extern "C" __declspec (dllexport)   
#else    
#define  EXPORT __declspec (dllexport)   
#endif    
   
EXPORT 
void   EdrCenterTextA();   
EXPORT 
void   EdrCenterTextW();   
EXPORT 
int   IncCounter();   
#ifdef UNICODE   
#define  EdrCenterText EdrCenterTextW   
#else    
#define  EdrCenterText EdrCenterTextA   
#endif   

注解:

    i. 定义 __cplusplus表示是供C++程序中调用。

    ii.__declspec (dllexport)表示函数调用方式,此处表示VS2008工程属性调用的默认方式。更改方法:

    右击项目--属性--配置属性--C/C++--高级,更改右侧“调用约定”。

    c)编写DLL文件(edrlib.cpp):

#include  " windows.h "    
#include 
" edrlib.h "    
// counter供调用该DLL的所有应用程序共享   
#pragma data_seg( " shared " )   
int  counter = 0 ;   
#pragma comment(linker,
" /SECTION:shared,RWS " )   
   
int  WINAPI DllMain(_In_ HANDLE _HDllHandle, _In_ DWORD _Reason, _In_opt_ LPVOID _Reserved)   
{   
    
return TRUE;   
}
   
   
EXPORT 
void    EdrCenterTextA()   
{   
    MessageBox(NULL,TEXT(
"调用DLL函数!"),TEXT("ASSIC版本"),MB_OK);   
       
}
   
EXPORT 
void   EdrCenterTextW()   
{   
    MessageBox(NULL,TEXT(
"调用DLL函数!"),TEXT("UNICODE版本"),MB_OK);   
   
}
   
   
EXPORT 
int   IncCounter()   
{   
    
return ++counter;   
}
  

  c)编译生成DLL。


二、调用DLL

   方法一、

   1。新建Win32应用程序空项目。

   2。把生成的dll、lib这2个文件复制到新建的目录下。

   3。添加导入库:工具--项目和解决方案--VC++目录,选择右侧“显示以下内容的目录”下的“库文件”,把lib所在目录添加。

   4。头文件:edrlib.h(与编写DLL中一样)

   5。源文件:main.c

/*#define cplusplus*/   // c++调用方式   
#include  " windows.h "    
#include 
" edrlib.h "    
#pragma comment(lib,
" edrlib.lib " )   
   
int  WINAPI WinMain(__in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in  int  nShowCmd )   
{   
   
    TCHAR buf[
32];   
    wsprintf(buf,L
"now,counter=%i",IncCounter());   
    MessageBox(NULL,buf,L
"--",MB_OK);   
    EdrCenterText();   
    
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  {   [DllImport("Cmdll.dll")]   public static extern int SampleMethod(int x);   static void Main()    {      Console.WriteLine("SampleMethod() returns {0}.", SampleMethod(5));   }}



from:http://apps.hi.baidu.com/share/detail/33471191

你可能感兴趣的:(C)