程序C++ to C#交互
阿新 • • 發佈:2017-05-18
ges tar 其他 tostring stat 選擇 ces auto readline
LIBEXPORT_API int Add(int a, int b);
#include "stdafx.h"
int Add(int a,int b)
{
return a+b;
}
復制到可運行文件文件夾下(如圖):
{
//[DllImport("..\\..\\lib\\CppDemo.dll")]
//public static extern void Function();
//[DllImport("..\\..\\lib\\CppDemo.dll")]
//public static extern int Add(int i, int j);
[DllImport("..\\..\\Lib\\Mydll1.dll")]
public static extern int Add(int a, int b);
}
{
Console.WriteLine("result: " + test.Add(2, 3).ToString());
Console.ReadLine();
} 以下是Program.cs的代碼: END(如圖):
第一次用C#調用C/C++生成的DLL文件,感覺有點新鮮,事實上僅僅是實現了執行在公共語言執行庫 (CLR) 的控制之外的“非托管代碼”(執行在公共語言執行庫(CLR)的控制之中的代碼碼稱為“托管代碼“)的東西,如何運用在托管下的非托管呢?如今給感興趣的剛開始學習的人簡單地寫一個實現的全過程吧(有什麽問題千萬別笑):
1.用VS2008選擇其他語言(C++)創建一個控制臺應用程序命名為Mydll1,然後選擇應用程序類型為DLL,確定
項目如圖:
在頭文件 stdafx.h 下加入例如以下聲明:
#define LIBEXPORT_API extern "C" __declspec(dllexport)
LIBEXPORT_API int Add(int a, int b);
在MyDll.cpp中實現這個函數:
#include "stdafx.h"
int Add(int a,int b)
{
return a+b;
}
註意假設實現的方法是聲明在其他頭文件裏的,一定要 加#include "xxx.h" 來引用這個聲明了這個函數頭文件。
生成MyDll.dll和MyDll.lib。
2.在Visual C# .net中引用dll文件
新建Visual C#控制臺應用程序命名為TestImportDll;
將MyDll.dll和MyDll.lib
在Praogram.cs中加入引用using System.Runtime.InteropServices;
按例如以下方式聲明一個將要引用MyDll.dll中函數的類:
class test
{
//[DllImport("..\\..\\lib\\CppDemo.dll")]
//public static extern void Function();
//[DllImport("..\\..\\lib\\CppDemo.dll")]
//public static extern int Add(int i, int j);
[DllImport("..\\..\\Lib\\Mydll1.dll")]
public static extern int Add(int a, int b);
}
最後在Main函數中調用這個類輸出結果:
static void Main(string[] args)
{
Console.WriteLine("result: " + test.Add(2, 3).ToString());
Console.ReadLine();
} 以下是Program.cs的代碼: END(如圖):
程序C++ to C#交互