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.
Ş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.
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.
using System.Runtime.InteropServices;
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());
}
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.
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.
Comments