C++ ile yazılan bir kütüphaneyi C# Programda Kullanmak

C++ ile yazılan bir kütüphaneyi C# Programda Kullanmak

Herkese merhabalar, Bu yazımızda C++ ile yazılan bir kütüphanenin C# ile yazılan bir programa nasıl entegre edilip kullanldığını göreceğiz. QT framework ile C++ kütüphanemizi oluşturacağız.

Hadi Başlayalım.

İlk olarak QT C++ ile bir kütüphane oluşturmalıyız. Aşağıdaki resimde bir kütüphane projesinin nasıl oluşturulduğu görülmektedir. QT C++ ile kütüphane projesi oluşturma
Ayrıca oluşturduğumuz kütüphaneyi Shared Library yani paylaşımlı kütüphane olarak seçmeyi unutmamalıyız. Shared Library kütüphanesi oluşturma

Şimdi kütüphanemize kodlarımızı yazmaya başlayabiliriz. Burada kütüphanemize basit matematiksel işlemlerin yapıldığı fonksiyonlar yazılacaktır. Aşağıdaki kod bloğunda yazdığımız kodları görebilirsiniz.

qtlibraryexample.h

#include "qtlibraryexample.h"
#include < stdio.h >

QtLibraryExample::QtLibraryExample()
{
}

extern "C" double add(int a, int b)
{
    return a + b;
}

extern "C" double subtrack(int a, int b)
{
    return a - b;
}

extern "C" double multiply(int a, int b)
{
    return a * b;
}

extern "C" QTLIBRARYEXAMPLESHARED_EXPORT double divide(int a, int b)
{
    return a / b;
}
qtlibraryexample_global.h

#ifndef QTLIBRARYEXAMPLE_GLOBAL_H
#define QTLIBRARYEXAMPLE_GLOBAL_H

#include <QtCore/qglobal.h>

#if defined(QTLIBRARYEXAMPLE_LIBRARY)
#  define QTLIBRARYEXAMPLESHARED_EXPORT Q_DECL_EXPORT
#else
#  define QTLIBRARYEXAMPLESHARED_EXPORT Q_DECL_IMPORT
#endif

extern "C" __declspec(dllexport) double add(int a, int b);
extern "C" __declspec(dllexport) double subtrack(int a, int b);
extern "C" __declspec(dllexport) double multiply(int a, int b);
extern "C" __declspec(dllexport) double divide(int a, int b);

#endif // QTLIBRARYEXAMPLE_GLOBAL_H

Ve son olarak projeyi build ediyoruz. Proje bir executable projesi olmayıp bir kütüphane projesi olduğu için Run edemezsiniz, Bu yüzden Build edip DLL dosyalarının oluşmasını sağlayınız.

Ayrıca QT kütüphanemiz 32-bit olarak derlenmiştir. Dolayısıyla C# programımızıda bu şekilde yapılandırmamız gerekmektedir. Aşağıdaki resimde QT kütüphanesinin 32-bit olarak derlendiğini görmektesiniz. QT Kütüphaneyi 32-bit olarak derlemektedir

Visual Studio projemizde 32-bit API kullanımını aktifleştirerek oluşturulan bu kütüphanenin kullanımını sağlayacağız. Yoksa program hata verecektir.

Şimdi MS Visual Studio ile bir C# projesi oluşturalım ve aşağıdaki yönergeleri takip edelim.

İlk olarak C# projemizde aşağıdaki Kütüphaneyi projemize dahil etmemiz gerekmektedir.

using System.Runtime.InteropServices;
Ardından C++ kütüphanemizde tanımlanan fonksiyonların prototiplerini burada dahil etmemiz gerekmektedir. Burada kütüphane header dosyasındaki prototip isimleri ile birebir aynı olmalarına dikkat ediniz.
Ardından bu metodları çağırmak için bir fonksiyon yazalım.

[DllImport("QtLibraryExample.dll")]
static extern double add(int a, int b);

[DllImport("QtLibraryExample.dll")]
static extern double subtrack(int a, int b);

[DllImport("QtLibraryExample.dll")]
static extern double multiply(int a, int b);

[DllImport("QtLibraryExample.dll")]
static extern  double divide(int a, int b);

static void callQtFunctions()
{
    Console.WriteLine("Result of 5 + 7 is " + add(5, 7).ToString());
    Console.WriteLine("Result of 21 - 10 is " + subtrack(21, 10).ToString());
    Console.WriteLine("Result of 9 x 3 is " + multiply(9, 3).ToString());
    Console.WriteLine("Result of 70 / 5 is " + divide(70, 5).ToString());
}
Sonra yukarıdaki metodları main fonksiyonu içerisinde çağırarak program çıktısını görelim.

static void Main(string[] args)
{
    Console.Title = "Using QT Libraries in C# Aplication Example - TheCodeProgram";
    callQtFunctions();
    Console.ReadLine();
}

Programı çalıştırmadan önce QT projesi tarafından oluşturulan bütün DLL dosyalarının Visual Studio projesindeki executable dosyası ile aynı dizinde olduğundan emin olunuz. Burası önemli, program DLL dosyalarını görmezse hata verecek ve çalışmayacaktır.

Ayrıca program Release modda olup 32-bit olarak işaretlenmiştir. Çünkü yukarıda bahsettiğimiz gibi QT kütüphanemiz 32-bit olarak derlenmiştir. Aşağıdaki resimde görüldüğü üzere visual studio proje özelliklerinden bu ayar değiştirilebilmektedir.

Visual Studio 32bit seçme
Aşağıdaki resimde proje çıktısını görebilirsiniz. C++ kütüphanesini C# uygulamasında kullanma örneği çıktısı

Bu yazımızda bu kadar.

Kaynak kodlara Github üzerinden belirtilen link ile ulaşabilirsiniz : https://github.com/thecodeprogram/QtLibraryForCSharpApplication

İyi Çalışmalar dilerim.

Burak Hamdi TUFAN.


Tags


Share this Post

Send with Whatsapp

Post a Comment

Success! Your comment sent to post. It will be showed after confirmation.
Error! There was an error sending your comment. Check your inputs!

Comments

  • There is no comment. Be the owner of first comment...