1. 程式人生 > >程序C++ to C#交互

程序C++ to C#交互

ges tar 其他 tostring stat 選擇 ces auto readline

第一次用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.dllMyDll.lib

2.在Visual C# .net中引用dll文件

新建Visual C#控制臺應用程序命名為TestImportDll;

MyDll.dllMyDll.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#交互