C#如何调用C写的Win32 DLL

1. 首先,在Visual Studio中,我们建立一个Visual C++的项目

    类型选择Win32 Project,继续选择Dll类型

    该项目取名叫做myDll

    1) 添加myDll.h头文件,代码如下:

#ifdef A_EXPORTS
#define  DLL_API __declspec(dllexport)
#else
#define  DLL_API __declspec(dllimport)
#endif

extern   " C "  DLL_API  void  HelloWorld();

    这里HelloWorld()就是等下我们要暴露给C#调用的C方法。

    注意:必须给函数增加extern "C"关键字,否则等下将无法找到该

             函数的入口点。

  

    2)添加myDll.cpp文件,代码如下:

#include  " stdafx.h "
#include 
" myDll.h "

#ifdef _MANAGED
#pragma  managed(push, off)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    
switch  (ul_reason_for_call)
    {
        
case  DLL_PROCESS_ATTACH:
        
case  DLL_THREAD_ATTACH:
        
case  DLL_THREAD_DETACH:
        
case  DLL_PROCESS_DETACH:
        
break ;
    }

    
return  TRUE;
}

void  HelloWorld()
{
    MessageBox(NULL, TEXT(
" Hello World " ), TEXT( " In a DLL " ), MB_OK);
}

#ifdef _MANAGED
#pragma  managed(pop)
#endif

 

 

 2. 编译成功!接下来我们便可以添加一个C#控制台项目了

     C#测试代码如下:

using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Runtime.InteropServices;

namespace  TestDll
{
    
class  Program
    {
        [DllImport(
" myDll.dll " )]
        
public   extern   static   void  HelloWorld();

        
static   void  Main( string [] args)
        {
            HelloWorld();
        }
    }
}

 

  在这里我要特别指出的是两点:

1) 必须使用如下命名空间

using System.Runtime.InteropServices

 

2) 对于原Dll文件中C方法的wrapper

        [DllImport( " myDll.dll " )]
        
public  extern  static  void  HelloWorld();

 

运行程序,会看到弹出Hello World对话框!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值