zoukankan      html  css  js  c++  java
  • 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对话框!

    技术改变世界
  • 相关阅读:
    《Python编程从入门到实践》学习笔记<7>:用户输入和while循环
    《Python编程从入门到实践》学习笔记<6>:字典
    《Python编程从入门到实践》学习笔记<5>:IF语句
    Navicat12激活,版本v12.1.18
    将博客搬至CSDN
    SVN中文提示
    SQL Server行转列
    .net操作AD域
    当经历过,你成长了,自己知道就好
    Outlook2010 POP3方式连接Hotmail等邮箱的错误处理
  • 原文地址:https://www.cnblogs.com/davidgu/p/2086024.html
Copyright © 2011-2022 走看看