Pages

Sunday, July 18, 2010

Cara Memanggil DLL C++ dari C#

Bahasa pemrograman C++ merupakan bahasa pemrograman yang paling efektif dan efisien dalam penggunaan memory serta kecepatan eksekusinya termasuk yang tercepat. Karena hal inilah library/pustaka (biasanya berupa file berekstensi .dll) yang digunakan oleh berbagai macam aplikasi biasanya dibuat dengan menggunakan bahasa ini. Sayangnya meskipun bahasa pemrograman ini sangat hebat, akan tetapi bahasa pemrograman ini lumayan lebih sulit untuk dipahami jika dibandingkan dengan bahasa pemrograman yang lain. Disamping itu juga fitur untuk mendesain GUI juga kurang memadai jika dibandingkan dengan bahasa pemrograman yang lain sehingga bahasa ini paling cocok untuk membuat aplikasi berbasis console atau untuk membuat library sebagai mesin pemroses data bagi aplikasi yang dibuat dengan bahasa pemrograman yang lain.

Disisi lain, C# merupakan bahasa pemrograman yang sangat mirip C++. Jika dibandingkan dengan C++, bahasa ini lebih murni dalam menerapkan konsep Pemrograman Berorientasi Obyek (OOP) dan lebih unggul dalam pembuatan GUI serta lebih mudah dipahami. Namun jika ditilik dari koleksi library/pustakanya masih kalah banyak jika dibandingkan dengan C++.

C++ dan C# seperti yang disebutkan dalam uraian diatas jelas-jelas merupakan 2 bahasa pemrograman yang berbeda meskipun ada kemiripan. Masing-masing mempunyai keunggulan dan kekurangan. Namun jika keunggulan dari kedua bahasa pemrograman tersebut digabungkan tentunya akan menghasilkan aplikasi yang sangat hebat. Untuk menggabungkannya ternyata bukanlah sesuatu yang mustahil. Caranya yaitu dengan C++ kita buat library/DLL yang kemudian fungsi-fungsi/method yang terdapat didalamnya kita panggil melalui program yang dibuat dengan C# (peran C# disini lebih difokuskan pada desain GUI). Cara seperti ini sudah lama diterapkan pada pembuatan aplikasi berplatform Windows yang mana Windows menyediakan berbagai library (biasanya dibuat dengan C++) yang dapat langsung dipakai oleh programmer dalam program yang dibuatnya (umumnya menggunkan VB atau Delphi atau yang lainnya).

Untuk itu, ikutilah petunjuk berikut dalam membuat DLL dari C++ dan cara menggunakanya dalam C#.(Source code program diartikel ini di compile menggunakan Microsoft Visual Studio .NET 2003)

# Membuat C++ DLL File
1. Buat project/solution baru:
    Nama project: Aritmatika
    Template: Class Library (.NET)
2. Pada file Aritmatika.h masukkan kode berikut ini:

// Aritmatika.h

#pragma once

using namespace System;

namespace Aritmatika
{
    public __gc class Hitung
    {
        public:
        static int Jumlah(int a, int b) { return a + b; }
        static int Kurangi(int a, int b) { return a - b; }        
    };
}
 3. Build/compile project diatas (hasil kompilasi: Aritmatika.dll).

# Membuat program test dengan C#
1. Buat project/solution baru:
    Nama project: Test
    Template: Console Application
2. Pada file Class1.cs masukkan kode berikut ini:
// CSharp
using System;
using Aritmatika;    // Dapat dihilangkan kalau class Hitung tidak dikenali 
                     // dan harus mengikutkan nama namespace nya
namespace Test
{
    class Hitung
    {
        [STAThread]
        static void Main(string[] args)
        {
            Console.WriteLine("Operasi Matematika 2 bilangan\n");

            Console.Write("Inputkan angka pertama : ");
            int a = Convert.ToInt32(Console.ReadLine()); 

            Console.Write("Inputkan angka kedua : ");
            int b = Convert.ToInt32(Console.ReadLine()); 
            
            // Memanggil method pada file dll
            int Hasil1 = Aritmatika.Hitung.Jumlah(a,b);
            int Hasil2 = Aritmatika.Hitung.Kurangi(a,b);
            
            // menampilkan hasil
            Console.WriteLine("\nHasil Penjumlahan: {0} ", Hasil1);
            Console.WriteLine("Hasil Pengurangan: {0} ", Hasil2);
            
            // Mencegah program untuk tidak langsung keluar
            Console.Write("\nTekan ENTER untuk keluar");
            Console.ReadLine();
        }
    }
} 
3. Pada Solution Explorer klik kanan References > Add Reference...
4. Pada tab .NET klik tombol Browse... > Cari file Aritmatika.dll hasil dari kompilasi program sebelumnya (biasanya didalam "My Documents\Visual Studio Projects\Aritmatika\Debug\").
5. Build/compile project diatas (hasil kompilasi: Test.exe didalam "My Documents\Visual Studio Projects\Test\bin\Debug\").
6. Jalankan program hasil kompilasi tersebut diatas.

Dengan begini kita telah membuat sebuah program yang terdiri atas 2 file yaitu Test.exe dan Aritmatika.dll. File Aritmatika.dll harus berada dalam folder dimana file Test.exe berada, kalau tidak begitu maka saat Test.exe dijalankan akan timbul error.

Referensi: C# and C++: Interoperability

4 comments:

  1. Bagaimana jika dll yang akan dibuat juga memanggil dll lain (yang juga dibuat dari visual c++), apakah dimungkinkan untuk diintegrasikan dengan C#?
    Terima Kasih

    ReplyDelete
  2. >> Bisa, pada dasarnya file dll itu fungsi/metode dalam rupa file. layaknya fungsi/metode pada umumnya fungsi dapat memanggil fungsi lain, contoh yang paling gampang di C++ adalah fungsi main memanggil fungsi lainnya. yang penting fungsinya jangan di private tapi di public.

    ReplyDelete
  3. Bisa diberikan contohnya utk custom dll memanggil custom dll ?
    jadi : a.exe --> b.dll --> c.dll


    terima kasih

    ReplyDelete
  4. Percobaan pertama lancar. tpi ketika saya coba lagi muncul error ini:

    Unable to start program 'C:\.....\aritmatika.dll

    ada yg bisa membantu?
    terimakasih :)

    ReplyDelete

Semoga artikel diatas bermanfaat bagi anda, dan jangan lupa berikan tanggapan anda atas artikel diatas dikolom komentar ini. Mohon maaf bila saya selaku penulis blog ini tidak bisa merespon dengan cepat setiap pertanyaan yang anda tulis dikolom komentar dikarenakan waktu luang yang saya miliki tidak sebanyak dulu saat masih kuliah