C#語言使用方便,入門門檻較代,上手容易,而且語法與C,java有很相似的地方,IDE作的也好,通用性好,是MS下一代開發的主要力量.可是其開源代碼較少,類庫不是十分完美,在架構方面還有一些須要作的工做.java
C++寫的程序佔用內存較小,直接對內存或者文件操做,所以一些關鍵的步驟或者一些最內層的循環在必定程序上還須要依賴C++.ios
下面我作一些簡單的例子架構
C++編寫DLL函數
QpHelper.hspa
#pragma once class QpHelper { public: // Returns a + b // 設置爲導出函數,並採用C風格。函數前加extern "C" __declspec(dllexport) // 定義函數在退出前本身清空堆棧,在函數前加__stdcall。 static __declspec(dllexport) int __stdcall add(int a, int b); // Returns a - b static __declspec(dllexport) int __stdcall sub(int a, int b); };
QpHelper.cppcode
#include "QpHelper.h" int QpHelper::add(int a, int b) { return (a + b); } int QpHelper::sub(int a, int b) { return (a - b); } extern "C" __declspec(dllexport) int Add(int a, int b) { return a + b; }
C++調用C++ DLLblog
Test.cpp內存
// Test.cpp : 定義控制檯應用程序的入口點。 // #include "stdafx.h" #include "QpHelper.h" #include <iostream> using namespace std; // 靜態方式調用DLL #pragma comment(lib,"MyDllDemo.lib") int main() { QpHelper qpHelper; int result = qpHelper.add(4, 5); cout << qpHelper.add(4, 5) << endl; cout << qpHelper.sub(4, 5) << endl; return 0; }
運行效果:開發
C#調用C++ DLLstring
using System; using System.Runtime.InteropServices; namespace ConsoleApplication1 { class Program { [DllImport("MyDllDemo.dll", EntryPoint = "Add", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)] public static extern int Add(int a, int b); //DllImport請參照MSDN static void Main(string[] args) { Console.WriteLine(Add(1, 2)); Console.Read(); } } }
運行效果: