http://www.28600.com/article2/12-47434.htm
這裡講述的是C#調用標準動態庫的問題, 在我以前的檔案中講到過, C#調用Win32API, 原理是一樣的. 這裡我詳細講解用C寫一個標準的動態庫, 然後讓C#調用. (本篇適合初學者, 中間沒有任何冗餘代碼, 簡潔明了)
軟體環境: VC6.0(當然其他版本的VC5也可以)
1.製作標準動態庫
__declspec(dllexport) int __cdecl add(int, int);//這一句是聲明動態庫輸出一個可供外不調用的函數原型.
int add(int a,int b) {//實現這個函數
return a+b;
}
以上簡單3行代碼,聲明一個add的方法, 輸入參數是兩個int參數,返回這兩個數之和. 儲存為MyLib.c
然後執行編譯命令.
H:\XSchool\C#-School\HowTo>cl /LD MyLib.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
MyLib.c
Microsoft (R) Incremental Linker Version 6.00.8447
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
/out:MyLib.dll
/dll
/implib:MyLib.lib
MyLib.obj
Creating library MyLib.lib and object MyLib.exp
確信有以上輸出, 說明編譯成功產生了動態庫.
2.編寫C-Sharp程式調用該動態庫
using System;
using System.Runtime.InteropServices;//這是用到DllImport時候要引入的包
public class InvokeDll {
[DllImport("MyLib.dll", CharSet=CharSet.Auto)]
static extern int add(int a,int b);//聲明外部的標準動態庫, 跟Win32API是一樣的.
public static void Main() {
Console.WriteLine(add(10,30));
}
}
儲存為InvokeDll.cs檔案, 與MyLib.dll置於同一目錄, 編譯該檔案.
H:\XSchool\C#-School\HowTo>csc invokedll.cs
將產生Invokedll.exe, 可以執行該檔案.
以上是C-Sharp調用標準動態庫的全過程, 本來覺得很簡單的東西, 一直都沒有想寫, 碰巧今日遇一朋友問及此事, 就順便寫了下來. 有什麼問題可以聯絡zlyperson@163.net