打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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对话框!

 


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
__declspec(dllimport)的作用
#ifdef
C# 中调用C++ DLL (P/Invoke) - 博园雅客 - 求工作,求包养 - 博...
C#中使用OpenGL:(二)C#调用C/C++的dll
c# – 如何从非托管DLL访问包含动态数组的csharp中的结构?
喜讯:由*.dll文件得出*.lib文件的方法已经找到__问吧_所有相关_中国学网
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服