這裡講述的是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:XSchoolC#-SchoolHowTo>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:XSchoolC#-SchoolHowTo>csc invokedll.cs
將生成Invokedll.exe, 可以執行該文件.
以上是C-Sharp調用標准動態庫的全過程.