C#调用C++ DLL动态库的两种方式

第一种方式:C++导出函数, c#dllimport 的方式

在很多地方都看到过,如[dllimport “user32.dll”]这种代码,调用windows API,就是通过这种方式实现

 

例子:

新建C++项目,创建动态链接库(DLL),然后添加头文件textdll.h

 

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

extern "C" DLL_API void MessageBoxShow();   //通过extern “C” 使MessageBoxShow方法为一个导出方法,外部可见

 

 

 

然后,dllmain.cpp中添加代码:

#include "stdafx.h"
#include "textdll.h"
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;
}

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

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


#ifdef _MANAGED
#pragma managed(pop)
#endif

 

编译通过后,找到目录下生成的DLL(TESTDLL.dll),拷贝出来,放到C#的debug目录(程序目录)下

 

然后新建C#程序:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;  //必须要添加该引用
using System.Text;
using System.Threading.Tasks;

namespace dlltest
{
    class Program
    {
        [DllImport("TESTDLL.dll")]  //最关键的,导入该dll
        public extern static void MessageBoxShow();
        static void Main(string[] args)
        {
            MessageBoxShow();
        }
    }
}

 

 

 

然后运行可以看到结果:成功的调用了C++DLL中的方法。

C#调用C++ DLL动态库的两种方式_第1张图片

 

 

 

第二种方式:

通过C++/CLI作为中间层,因为C++/CLI即可调用.NET的类库,又可调用C++原生库,

所以可以通过C# 调用 C++/CLI 再调用 C++ DLL这样的三层调用方式完成。

 

未完待续。。。。。

 

 

转载于:https://www.cnblogs.com/kevinWu7/p/10163517.html

你可能感兴趣的:(C#调用C++ DLL动态库的两种方式)