DLL檔案 的隨手筆記 1 - DLL 5 如何創建 C# 可以使用的 C++ DLL檔案 (版本 2.0)

延續 DLL 4 在DLL中加入 Class範例 :  https://dotblogs.com.tw/April_Notes/2025/01/07/095021

 

之前寫的 如何創建 C# 可以使用的 C++ DLL檔案  有新的方法

延續 DLL 4 在DLL中加入 Class範例

 

1. 先修改一段 DLL 加入extern "C" MYDLL_API

MyDLL.cpp

#include "pch.h"
#include <cmath>
#include <iostream>
#include "MyDLL.h"



ADD_Control::ADD_Control()
{
    std::cout << "Hello ADD";
}

int ADD_Control::Add_test(int i, int j)
{
    return i + j;
}



extern "C" MYDLL_API int Add(int a, int b);


extern int Add(int a, int b)
{
    ADD_Control ADD_Csharp;
    return ADD_Csharp.Add_test(a, b);
}

 

MyDLL.h

#pragma once

#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif

using namespace std;

class MYDLL_API ADD_Control {
public:
    ADD_Control();

    
    int Add_test(int i,int j);
private:
    
    int ADD_ID = 0;

};

 

2. C# 使用 PInvoke

使用Framework 來測試 C# 測試 :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {

        [DllImport("MyDLL.dll", EntryPoint = "Add", CallingConvention = CallingConvention.Cdecl)]
        private static extern int add(int a, int b);


        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
             button1.Text = add(1,2).ToString();
        }

    }
}

為了方便 可以將EXE複製到DLL那邊
在建置事件後 加入 

xcopy /y /d  $(TargetDir)$(TargetFileName) $(SolutionDir)$(PlatformName)\$(ConfigurationName)

 

 

選擇 Framework 來測試 C#

 

 

 

 

大致上我簡單畫一下