Documentation

    Table of Content
    • CodePorting.Native Product Family
      • CodePorting.Native Cs2Cpp
        • Getting Started
          • Product Overview
          • Installation
          • Licensing
          • How to use CodePorting.Native Cs2Cpp
            • How to Use Command line to port and build Projects
            • How to Use GUI to port and build Projects
        • Developer Guide
          • Porting Simple C# Projects
            • Porting Simple Console Application
            • Porting Simple Library
            • Porting Simple NUnit Test
          • Porting Dependent C# Projects
            • Porting Dependent Console Application
            • Porting Dependent Library
            • Porting Dependent NUnit Test
          • Porting Complex C# Projects
            • How to Convert Complex C# Console Application to C++
            • How to Convert Complex C# Library to C++
            • How to Convert Complex C# NUnit Test to C++
          • What Converts to What
            • Abstract Classes
            • Auto Properties
            • Break Statements
            • Class Constructors
            • Continue Statements
            • Delegates
            • Do While Statemetns
            • Enums TypeCast
            • Enums
            • Events
            • Exceptions
            • Expected Exceptions
            • Finalizers
            • For Statements
            • ForEach Statements
            • Generic Classes
            • Generic Delegates
            • Generic Interfaces
            • Generic Methods
            • Generic Structs
            • If Statements
            • Indexers
            • Lambda Expressions
            • Methods
            • Nested Classes
            • Properties
            • Return Statements
            • Simple Class
            • Simple Interface
            • Simple Struct
            • Simple Test
            • Standard TypeCast
            • Static Class
            • Static Constructor
            • Static-Methods
            • Static Properties
            • Switch Statements
            • Test with Setup Methods
            • Throw Statements
            • Try Catch Finally Statements
            • Try Catch Statements
            • Try Finally Statements
            • Var Expressions
            • Virtual Methods
            • While Statements
          • CodePorting Native Cs2Cpp Attributes
          • CodePorting Native Cs2Cpp Configuration File
            • CodePorting.Native Cs2Cpp Configuration File Structure
            • Attributes in Configuration file
            • Configuration file Nodes
            • Configuration file Options
          • Memory Management Model
            • Using aliasing constructor to create a smart pointer
          • Cmake Support
          • Limitations and Bugs
            • Porter Limitations and Bugs
            • Library Limitations and Bugs
            • Cpp Code Injection
        • Release Notes
          • 2020
            • CodePorting.Native Cs2Cpp 20.11
            • CodePorting.Native Cs2Cpp 20.12
            • CodePorting.Native Cs2Cpp 20.10
            • CodePorting.Native Cs2Cpp 20.9
            • CodePorting.Native Cs2Cpp 20.8
            • CodePorting.Native Cs2Cpp 20.7
            • CodePorting.Native Cs2Cpp 20.6
            • CodePorting.Native Cs2Cpp 20.5
            • CodePorting.Native Cs2Cpp 20.4
            • CodePorting.Native Cs2Cpp 20.3
            • CodePorting.Native Cs2Cpp 20.2
            • CodePorting.Native Cs2Cpp 20.1
          • 2021
            • CodePorting.Native Cs2Cpp 21.1
          • 2018
            • CodePorting.Native Cs2Cpp 18.9
            • CodePorting.Native Cs2Cpp 18.9.1
            • CodePorting.Native Cs2Cpp 18.10
            • CodePorting.Native Cs2Cpp 18.11
            • CodePorting.Native Cs2Cpp 18.12
          • 2019
            • CodePorting.Native Cs2Cpp 19.1
            • CodePorting.Native Cs2Cpp 19.2
            • CodePorting.Native Cs2Cpp 19.3
            • CodePorting.Native Cs2Cpp 19.4
            • CodePorting.Native Cs2Cpp 19.4.1
            • CodePorting.Native Cs2Cpp 19.5
            • CodePorting.Native Cs2Cpp 19.6
            • CodePorting.Native Cs2Cpp 19.7
            • CodePorting.Native Cs2Cpp 19.8
            • CodePorting.Native Cs2Cpp 19.9
            • CodePorting.Native Cs2Cpp 19.10
            • CodePorting.Native Cs2Cpp 19.11
            • CodePorting.Native Cs2Cpp 19.12

    What's on this Page

      • Porting a simple C# library project
    1. Home
    2. CodePorting.Native Product Family
    3. CodePorting.Native Cs2Cpp
    4. Developer Guide
    5. Porting Simple C# Projects
    6. Porting Simple Library

     

    Note that this example is built upon several assumptions, namely:
    • Porter is installed to C:\CodePorting.Native_Cs2Cpp_19.4 directory
    • All C# projects are located in C:\SimpleLibrary directory
    • The output directory is C:\output

    Porting a simple C# library project

    This example demonstrates how to a simple C# library project. We’ll use pre-existing projects from SimpleLibrary example located here.

    SimpleLibrary is a library project that consists of a single .cs source file SimpleLibrary.cs and a project file SimpleLibrary.csproj. This project does not depend on any other C# projects. SimpleLibrary project’s configuration file is pre-created, its name is SimpleLibrary.porter.config and it is located in the project’s directory SimpleLibrary. Let us have a closer look at the configuration file.

    SimpleLibrary.porter.config file is quite simple. It begins with an XML declaration, which specifies that the file contains an XML document  
    
    Then goes the XML root element <porter> which is mandatory for Porter configuration XML document  
    
        <porter>  
    
    Next, the default Porter configuration file is imported using <import> element. The default configuration will assign default values to all configuration options  
    
        <import config="porter.config"/>  
    
    Finally the XML document is finished with closing tag of the root element <porter>  
    
        </porter>

    This example assumes that C# SimpleLibrary project should be ported into C++ static library project, which is a default setting.

    With the C# project at hand and configuration file ready, we can convert the project.

    In order to covert ComplexConsoleApp project we run CMD and navigate to the directory with porter binary:

    >cd C:\CodePorting.Native_Cs2Cpp_19.4\bin\porter
    

    And run Porter:

     >CsToCppPorter.exe -c C:\SimpleLibrary\SimpleLibrary.porter.config C:\SimpleLibrary\SimpleLibrary.csproj C:\output
    

    Porter will print some logs of the porting process to the console window and when it finishes porting, directory C:\output will contain a directory named SimpleLibrary.Cpp containing the generated C++ source files and Cmake configuration files.

    Now we want to use Cmake to generate makefile/project files. Let it be a Visual Studio 2017 x86 project file. In CMD we navigate to the C:\output\SimpleLibrary.Cpp directory

     >cd C:\output\SimpleLibrary.Cpp
    

    And run Cmake in configuration mode:

     >Cmake --G "Visual Studio 15 2017"  
    

    And now we can build the sources using either Cmake or Visual Studio. Let us use Cmake:

     >Cmake --build . --config Release
    

    The library is built.