zoukankan      html  css  js  c++  java
  • C#引用C++开发的DLL

    C#语言使用方便,入门门槛较代,上手容易,并且语法与C,java有很类似的地方,IDE做的也好,通用性好,是MS下一代开发的主要力量.但是其开源代码较少,类库不是十分完美,在架构方面还有一些需要做的工作.

    C++写的程序占用内存较小,直接对内存或者文件操作,因此一些关键的步骤或者一些最内层的循环在一定程序上还需要依赖C++.

     下面我做一些简单的例子

     C++编写DLL

    QpHelper.h

    #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.cpp

    #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++ DLL

     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++ DLL

    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();
            }
        }
    }

    运行效果:

  • 相关阅读:
    poj3294 Life Forms(后缀数组)
    1628. White Streaks(STL)
    1523. K-inversions(K逆序对)
    1890. Money out of Thin Air(线段树 dfs转换区间)
    1350. Canteen(map)
    1521. War Games 2(线段树解约瑟夫)
    1003. Parity(并查集)
    1470. UFOs(三维树状数组)
    1471. Tree(LCA)
    1494. Monobilliards(栈)
  • 原文地址:https://www.cnblogs.com/Bobby0322/p/5416575.html
Copyright © 2011-2022 走看看