本文主要是想介紹一下如何使用vs.net 2008生成,可供.net程序及c/c++程序同時使用的dll (暫時就叫它perfect dll好了), 說白了,就是把managed code和unmanaged code通過程序集鏈接器 (Al.exe)創建在一個程序集中。
最佳實踐:
1. 創建一個C++ Win32 dll project, 比如就叫asmproject。
2. 在asmproject.cpp中,添加一個add方法,這個方法簡單的以至於我都能用asm來寫,好吧,那就的叟一下好了。
extern "C" __declspec(dllexport) int add(int a, int b)
{
int c;
__asm
{
mov eax, a;
add eax, b;
mov c, eax;
}
return c;
}
3. 再創建一個C# Class Library的項目,叫asmlibrary吧,添加一個靜態類
public static class asmlibrary
{
[DllImport("asmlibrary.dll")]
public static extern int add(int a, int b);
}
注意那個DllImport,是引用的自已哦。
4. 下邊,關鍵的步驟來了。用記事本打開asmlibrary.csproj文件,找到<OutputType>項,將它改為Module, 保存。回到vs.net中,生成asmlibrary,這時,去生成目錄下看,你會看到生成一個asmlibrary.netmodule文件。
5. 打開那個c++項目asmproject的Property Pages, 找到Configuration Properties -> Linker -> Input -> Addtional Dependencies, 添加上邊生成的那個asmlibrary.netmodule文件, 再找到
Configuration Properties -> Linker -> General -> Output File,改成asmlibrary.dll。這是,再編譯這個c++項目,就可以得到這個名字叫asmlibrary.dll的"perfect dll"了。
好了,來調用一下試試吧,再建一個C# windows appliction,添加引用asmlibrary.dll,看看是不是可以引用?!
讓我們使用兩個工具,來查看一下這個“神奇的”dll吧:
本文配套源碼