首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 呼叫標準 C/C++ 動態連結庫 (DLL) 完整教學

     編輯:關於C語言

詳細示範從零建立標準 C 風格 DLL,並由 C# 透過 P/Invoke (DllImport) 呼叫的完整流程。原理同呼叫 Win32 API。

環境需求

  • Visual C++ 6.0 或更新版本
  • .NET Framework SDK (含 csc.exe)

步驟 1:建立標準 DLL (C 語言)

MyLib.c:

__declspec(dllexport) int __cdecl add(int a, int b); // 匯出聲明

int add(int a, int b) {  // 實作
    return a + b;
}

命令列編譯:

cl /LD MyLib.c

輸出:MyLib.dll、MyLib.lib、MyLib.exp。

步驟 2:C# 程式呼叫 DLL

InvokeDll.cs:

using System;
using System.Runtime.InteropServices; // 必須引用

public class InvokeDll {
    [DllImport("MyLib.dll", CharSet = CharSet.Auto)]
    static extern int add(int a, int b); // 外部函式聲明

    public static void Main() {
        Console.WriteLine(add(10, 30)); // 輸出: 40
    }
}

編譯與執行:

csc InvokeDll.cs
InvokeDll.exe  # 需與 MyLib.dll 同目錄

關鍵技術點

項目說明
__declspec(dllexport)告知編譯器將函式匯出至 DLL 匯出表
__cdeclC 預設呼叫慣例(呼叫端清理堆疊),C# P/Invoke 預設即為此慣例
DllImport標示外部非托管函式,由 CLR 處理封送
CharSet.Auto依平台自動選擇 ANSI/Unicode 字串封送
static extern指示方法為外部非托管實作

進階主題延伸

  • 結構體封送 (StructLayout、MarshalAs)
  • 字串/陣列/指標參數封送
  • 回呼函式 (delegate + CallConvCdecl)
  • 錯誤處理 (GetLastError、SetLastError=true)
提示: 實務開發建議使用 Visual Studio 專案管理(C++ DLL 專案 + C# 專案),設定建置順序與輸出路徑,避免手動複製 DLL。本範例採命令列展示最核心流程。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved