在VS2008中編譯純c/c++程序並由c#調用過程

 引用:http://www.cnblogs.com/moonz-wu/archive/2008/02/29/1086759.html
這篇文章沒有什麼新意,在2004年的時候就有人寫過那時候VS還只是2003版,而且網絡上也有很多轉來轉去的文章,其實一共那麼兩三篇。其實我也是從那裏學來的,只不過中間經歷的一些鬱悶,因爲那些文章沒有提到一些注意的事項確是很煩人。
1. 建立一個C#控制檯工程,主要用於調試。
2. 在解決方案中添加一個新的空工程(VC++的)。
3. 添加一個源文件到Source Files文件夾(xxx.c or xxx.cpp)。
4. 加入這行代碼

#include <string.h>

extern "C" __declspec(dllexport) int mySum(int a,int b,int *c)
{
    *c=a+b;
    return *c;
} 由於原來的文章沒有提,導致我缺了#include <string.h>而編譯出錯,花了點時間修正這問題。
5. 右鍵點擊C++工程,在屬性中的General->Configuration Type 選擇 Dynamic Library (.dll)。這裏還要注意的是爲了編譯生成的dll文件能被c# 工程導入你需要Common Language Runtime support 選擇Common Language Runtime Support (/clr)這項,否則編譯的dll不能用到c#工程當中。
6. build C++工程(你也可以用命令行CL.exe來編譯文件)。之後,有很多人就直接向當然的跑到c++工程下面的Debug文件夾裏去找xxx.dll文件,結果只看到xxx.dll.intermediate.manifest這樣的文件失望而歸。其實編譯後真正的dll文件是在解決方案的Debug文件夾下面。
7. 在c#工程的引用中導入xxx.dll。在c#主文件中鍵入如下代碼:我這裏的xxx = CCodeDll
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace TestEmbedCCalling
{
    class Program
    {
        [DllImport("CCodeDll.dll", EntryPoint = "mySum", CharSet = CharSet.Ansi,
            CallingConvention = CallingConvention.StdCall)]
        public static extern int mySum(int a, int b, ref int c);

        static void Main(string[] args)
        {
            int c = 0;
            Console.WriteLine(mySum(2, 3, ref c));
            Console.Read();
        }
    }
}最後你會看到運行結果:5。
請注意綠色字體內容,祝你好運。


 C++引用c#dll 模擬登陸實現   
用C++寫Dll需要很多規範,而在.Net平臺下通過c#實現的Dll則要方便許多。但在c++中調用c#寫的Dll就得注意一下。不能像引用C++本身的DLL一樣。這裏講一下應該注意的細節:(以VS2005爲例,VS2008類似)

1.因爲用c++本身 的默認配置是沒有公共語言運行庫支持的,所以首先的修改配置,點擊項目->屬性->配置屬性->常規.在公共語言運行庫支持中選擇"公共語言運行庫支持(/clr)".

2.引用Dll文件和命名空間.
如果我們要引用一個命名空間爲UranusNet,文件名爲UranusNet.dll的文件.則引用方法爲:
#using "../debug/UranusNet.dll"  (這裏用using而非include)
using namespace UranusNet;
記得要將dll文件拷貝到對應的目錄下

3.調用方法
加入要調用UranusNet命名空間下的UGSInfo類.則代碼如下所示:(假設該類有logIn和writeBlog兩個方法)
UGSInfo ^ugs = gcnew UGSInfo();(這裏要用^而不是*,gcnew而非new)
 if(ugs->logIn("abc","123"))
      ugs->writeBlog("很好", "很強大");

以上就是在c++調用C#的Dll的要點。由於c#的簡潔方便的特點,所以我們可以用C#快速的實現DLL文件。
當然一些更底層的功能還得用c++實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章