浮動小数型

概要

浮動小数型のデータのやりとり

浮動小数型

C#のDecimal型については、そのままC++で簡易に受け取ることが出来ませんので、
受け渡す際には、

  • 値がまるまってしまうことを覚悟でdoubleなどにするか、
  • 文字列にしてそのまま伝達するのか
  • あるいはC++側をC++/CLIにしてそのままSystem::Decimal型を利用するのか

など、ご自身の用途によって工夫が必要となるでしょう。

  • C++側のソース

    Dll1.dllとしてコンパイル
    #include <windows.h>
    #include <cstddef>
    #include <iostream>
    
    using namespace std;
    
    #define DLLEXPORT __declspec(dllexport) WINAPI
    
    // float受け取り
    extern "C" void DLLEXPORT dllfloat(const float a) {
    	cout << fixed << a << endl;
    }
    
    // double受け取り
    extern "C" void DLLEXPORT dlldouble(const double b) {
    	cout << fixed << b << endl;
    }
    
  • C#側のソース

    test1.cs
    using System;
    using System.Runtime.InteropServices;
    
    namespace test1
    {
        internal class Program
        {
            [DllImport("Dll1.dll")]
            static extern void dllfloat(float a);
    
            [DllImport("Dll1.dll")]
            static extern void dlldouble(double b);
    
    
    
            static void Main(string[] args)
            {
                float a = 100.33f;
                dllfloat(a);
    
                double b = 200.4444d;
                dlldouble(b);
    
    
                Console.ReadKey();
            }
        }
    }