C#調用Win32API
軟件環境: 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. www.devdao.com 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