Home > Visual Basic, Visual C# > Menggunakan library .NET di VB 6

Menggunakan library .NET di VB 6

June 1, 2012

Ini postingan lama sebenarnya, jawaban sy untuk salah satu pertanyaan member di forum i-bego.

Sy posting kembali disini untuk tujuan dokumentasi saja, mana tau suatu saat sy butuhkan.

Untuk contoh kasusnya adalah kita akan mengambil salah satu project open source yg bernama QRCode Library dibuat menggunakan C#, dan dengan sedikit modifikasi library .NET ini akan bisa kita gunakan untuk VB 6.

Tapi sebelumnya kita lihat dulu apa itu QR Code ???

QR Code (abbreviated from Quick Response Code) is the trademark for a type of matrix barcode (or two-dimensional code) first designed for the automotive industry. More recently, the system has become popular outside the industry due to its fast readability and large storage capacity compared to standard UPC barcodes. The code consists of black modules (square dots) arranged in a square pattern on a white background. The information encoded can be made up of four standardized kinds (“modes”) of data (numeric, alphanumeric, byte/binary, Kanji), or through supported extensions, virtually any kind of data.

Sumber : http://en.wikipedia.org/wiki/QR_code

Contoh QR Code

Oke langsung saja download QRCode Library, untuk contoh disini sy menggunakan C# 2005

1. Aktifkan terlebih dulu project QRCode Library

2. klik kanan Project (QRCodeLib) -> Properties, aktifkan tab Application kemudian klik tombol Assembly Information … kemudian aktifkan pilihan Make assembly COM-Visible

3. Aktifkan tab Build kemudian aktifkan pilihan Register for COM interop

4. Mendaftarkan file ThoughtWorks.QRCode.dll dan ThoughtWorks.QRCode.tlb menggunakan tool RegAsm.exe yg ada di folder NET Framework

C:\Windows\Microsoft.NET\Framework\v2.0.50727

Contoh saya menggunakan dot NET Framework 2, adapun perintahnya seperti berikut :

regasm ThoughtWorks.QRCode.dll /tlb: ThoughtWorks.QRCode.tlb /codebase

Sampai disini QRCode Library sudah bisa diakses dari VB 6

Sekarang kita lihat sample asli dari QRCode Library

Dari sample tersebut kode (C#) untuk melakukan encode sebuah data bertipe string menjadi gambar dengan format QR Code adalah seperti berikut :

private void btnEncode_Click_1(object sender, EventArgs e)
{
    if (txtEncodeData.Text.Trim() == String.Empty)
    {
        MessageBox.Show("Data must not be empty.");
        return;
    }

    QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
    String encoding = cboEncoding.Text ;
    if (encoding == "Byte") {
        qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
    } else if (encoding == "AlphaNumeric") {
        qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC;
    } else if (encoding == "Numeric") {
        qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.NUMERIC;
    }
    try {
        int scale = Convert.ToInt16(txtSize.Text);
        qrCodeEncoder.QRCodeScale = scale;
    } catch (Exception ex) {
        MessageBox.Show("Invalid size!");
        return;
    }
    try {
        int version = Convert.ToInt16(cboVersion.Text) ;
        qrCodeEncoder.QRCodeVersion = version;
    } catch (Exception ex) {
        MessageBox.Show("Invalid version !");
    }

    string errorCorrect = cboCorrectionLevel.Text;
    if (errorCorrect == "L")
        qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
    else if (errorCorrect == "M")
        qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
    else if (errorCorrect == "Q")
        qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;
    else if (errorCorrect == "H")
        qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;

    Image image;
    String data = txtEncodeData.Text;
    image = qrCodeEncoder.Encode(data);
    picEncode.Image = image;
}

Sedangkan untuk versi VB 6nya sy buat sesimple mungkin

Private Sub cmdEncode_Click()
    Dim qrEncoder As New QRCodeEncoder

    qrEncoder.QRCodeEncodeMode = ENCODE_MODE.ENCODE_MODE_BYTE
    qrEncoder.QRCodeScale = 4
    qrEncoder.QRCodeVersion = 7
    qrEncoder.QRCodeErrorCorrect = ERROR_CORRECTION.ERROR_CORRECTION_M

    picEncode.Picture = qrEncoder.Encode(txtEncodeData.Text) ' error : Invalid procedure call or argument
End Sub

tapi hasilnya malah error ‘Invalid procedure call or argument’😦, dan berdasarkan hasil pengamatan sementara, menurut sy penyebab errornya adalah karena method Encode adalah method yg dioverload sedangkan method overload belum disupport oleh VB 6.

public virtual Bitmap Encode(String content)
public virtual Bitmap Encode(String content, Encoding encoding)

Jadi sy putuskan untuk menambahkan method baru dengan nama EncodeVB6, kemudian mengganti perintah

picEncode.Picture = qrEncoder.Encode(txtEncodeData.Text)

menjadi

picEncode.Picture = qrEncoder.EncodeVB6(txtEncodeData.Text)

Kode lengkap method EncodeVB6

public virtual Bitmap EncodeVB6(String content)
{
    if (QRCodeUtility.IsUniCode(content))
    {
        return Encode(content, Encoding.Unicode);
    }
    Else
    {
        return Encode(content, Encoding.ASCII);
    }
}

Horeeeeee gubrakk, ternyata…. masih error😦 ‘Type mismatch’

picEncode.Picture = qrEncoder.EncodeVB6(txtEncodeData.Text) ' error : Type mismatch

dari pesan errornya sudah jelas karena properties Picture bertipe StdPicture sedangkan method EncodeVB6 bertipe Bitmap dan di VB 6 enggak ada tipe Bitmap😦, tapi untungnya🙂 ada method ImageToIPicture yg diambil dari class Support (namespace Microsoft.VisualBasic.Compatibility.VB6) sehingga method EncodeVB6nya kita revisi menjadi :

public virtual object EncodeVB6(String content)
{
    if (QRCodeUtility.IsUniCode(content))
    {
        return Microsoft.VisualBasic.Compatibility.VB6.Support.ImageToIPicture(Encode(content, Encoding.Unicode));
    }
    Else
    {
        return Microsoft.VisualBasic.Compatibility.VB6.Support.ImageToIPicture(Encode(content, Encoding.ASCII));
    }
}

Sampai disi permasalah method EncodeVB6 sudah selesai🙂

Terakhir kita akan melakukan proses decode

dan kita lihat dulu kode aslinya (c#)

private void btnDecode_Click(object sender, EventArgs e)
{
    try
    {
        QRCodeDecoder decoder = new QRCodeDecoder();
        String decodedString = decoder.decode(new QRCodeBitmapImage(new Bitmap(picDecode.Image)));

        txtDecodedData.Text = decodedString;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

Dari kode diatas jelas tidak bisa langsung dikonversi ke VB 6 karena VB 6 tidak mendukung pemanggilan constructor class yg mempunyai parameter.

Tapi ada baiknya kita lihat dulu constructor class QRCodeBitmapImage yg ternyata membutuhkan objek Bitmap pada saat dipanggil.

///
<summary> /// Constructor
/// </summary>
///Bitmap image/param>
public QRCodeBitmapImage(Bitmap image)
{
    this.image = image;
}

Solusinya kita akan menambahkan costructor default (constructor tanpa parameter)

// default constructor
Public QRCodeBitmapImage()
{
}

trus untuk melewatkan objek Bitmap ke class QRCodeBitmapImage kita akan menambahkan property baru misal dengan nama SetBitmap, adapun kodenya seperti berikut :

public virtual Bitmap SetBitmap
{
    set { image = value; }
}

Properties SetBitmap diatas bertipe Bitmap, tapi sayang di VB 6 belum ada padanan tipe datanya jadi kita akan menggunakan tipe Object, kemudian untuk mengkonversi ke tipe Bitmap kita menggunakan method IPictureToImage yg diambil dari class Support (namespace Microsoft.VisualBasic.Compatibility.VB6)

public virtual object SetBitmap
{
    set { image = (System.Drawing.Bitmap)Microsoft.VisualBasic.Compatibility.VB6.Support.IPictureToImage(value); }
}

Setelah itu baru kita bisa melakukan konversi dengan aman di VB 6

Private Sub cmdDecode_Click()
    Dim decoder As New QRCodeDecoder

    Dim decodedString As String

    Dim qrCodeImage As New QRCodeBitmapImage
    qrCodeImage.SetBitmap = picEncode.Picture

    decodedString = decoder.decodeVB6(qrCodeImage)

    MsgBox "Hasil decode : " & vbCrLf & decodedString, vbInformation, "Informasi"
End Sub

Yuph akhirnya selesai juga🙂

Selamat MENCOBA🙂

  1. June 1, 2012 at 8:06 pm

    wih… tutorialnya sangat bermanfaat sekali. Apakah seluruh library .NET bisa di COM visiblekan diakses melalui proses seperti cara di atas?

    • June 2, 2012 at 9:22 am

      Harusnya bisa om, asalkan punya akses ke source codenya, agar bisa melakukan penyesuaikan seperti kasus di atas.

  2. yakin79
    June 4, 2012 at 3:06 pm

    Blog belajar pemrograman terbaik yg pernah saya jumpai, bahkan lebih baik dari yg berbayar, anda yang terbaik, I Like It… coding nya mantap2, terima kasih ya atas sharing ilmu nya, hanya Allah yang bisa membalas nya.

    • June 4, 2012 at 4:02 pm

      Amin🙂

      Tq juga om udah mampir kesini, knowledge is free🙂

  3. herricardo kaka
    June 5, 2012 at 10:32 am

    mas mau nanya cara binding recordset, misalkan saya mau menampilkan 6 record dari database.. dan untuk record selanjutnya saya tampilkan melalui tombol navigasi next dengan tampilannya melalui datagrid.
    mohon bantuannya terimakasih sebelumnya..🙂

    • June 5, 2012 at 10:53 am

      Datagrid ya ? udah lama banget enggak sy pake, terakhir kayaxnya pas jaman2x praktikum kuliah dulu😀.

      Jadi om mungkin bisa coba link ini.

  4. ian
    June 9, 2012 at 7:52 am

    itu .Net 2005 atau 2008 om?
    mw tnya tw komponen tambahan untuk combobox autocomplete g di 2005, klo d VB 6 kn ada tuh TDBcombo keluaran apex?

    • June 9, 2012 at 10:04 am

      2005 om, untuk combonya coba disini.

  5. June 29, 2012 at 1:50 am

    assalamualaikum
    mas, gmn ya caranya buat No urut (1,2,3…) pada Listview di vb6
    makasih…

    • June 30, 2012 at 8:00 pm

      Waalaikumussalam

      Nah disini udah sy bahas om.

  6. July 3, 2012 at 9:03 am

    om admin gmna ya cara input data di program yg sama kemudian mau disatukan data ya, klw dibuat client server kan bisa aja datanya 1 database, tp klw seperti ini gmna om solusinya ??
    klw saya gunakan backup restore data ya gak jadi satu tp malah replace data ya, minta solusinya om ..??

    • July 6, 2012 at 2:46 pm

      Pada saat backup datanya disimpan ke file text aja om, langkah2xnya sederhanya kok:
      1. select tabel yg ingin dibackup
      2. tulis ke file text
      3. simpan file text sesuai dg nama tabelnya misal barang.txt, customer.txt

      Untuk restore, langkah-langkahnya :
      1. baca file text, misal barang.txt, customer.txt
      2. insert ke tabel

      • July 8, 2012 at 2:28 pm

        Ya si om kyak bisa tuh, ok om saya coba dulu deh ….
        klw om admin ada contoh sourcode ya boleh minta share om,, lg butuh om untuk Tugas … hehehe
        mksh om sblmnya …🙂

        • July 8, 2012 at 3:53 pm

          Klo sy nunggu om aja😀

  7. July 12, 2012 at 2:52 pm

    assalamualaikum
    maaf mas pertanyaan ini agak menyimpang🙂
    ceritanya saya puya 2 master, data kolektor dan data member, nah pertanyaanya gmn caranya ketika kolektor login, maka data member yang tampil di form member khusus milik kolektor yang sedang login tersebut. mungkin mas punya solusinya.
    Terimakasih

    • July 15, 2012 at 1:58 pm

      Ya waktu membuat query loginnya harus direlasikan antara tabel kolektor dan member.

  8. July 12, 2012 at 4:10 pm

    maaf of ralat comment ya
    pertanyaan di atas di handl dlu🙂, sekarang saya mau tanya
    gmn menampilkan member per kolektor, yang di pilih pada item listview data kolektor
    terimakasih

    • July 15, 2012 at 2:00 pm

      Sy nunggu dulu deh yg udah om buat seperti apa, jadi dicoba dulu trus klo hasilnya tidak sesuai dg yg dimaksud baru dibahas disini.

  9. Bondan
    July 25, 2012 at 12:42 pm

    mas, punya contoh untuk yg visual 2008 ga?? saya lagi membutuhkan untuk tugas.. terima kasih sebelumnya..🙂

    • July 25, 2012 at 12:47 pm

      Ya berarti tinggal buka QRCode Librarynya, otomatiskan diupgrade ke 2008.

      • Bondan
        July 25, 2012 at 1:50 pm

        sudah saya coba mas, dan ada errornya..

      • Bondan
        July 25, 2012 at 1:54 pm

        bisa dijelaskan mas mengapa keluar error seperti ini saat di-debug.. —–> ThoughtWorks.QRCode.Properties.Resources’ does not contain a definition for ‘GetResource’

        • July 25, 2012 at 3:47 pm

          Ada sedikit perbedaan kode antara C# 2005 dan 2008, jadi tinggal ganti kode berikut :

          MemoryStream memoryStream = new MemoryStream(Resources.GetResource(fileName));
          

          Menjadi

          MemoryStream memoryStream = new MemoryStream((byte[])Resources.ResourceManager.GetObject(fileName));
          
          • Bondan
            July 26, 2012 at 9:06 am

            begitu yaa mas.. sudah saya coba dan berhasil mas.. terima kasih mas atas penjelasannya..🙂

            • July 26, 2012 at 9:54 am

              Oke om sama2x🙂

              • Bondan
                July 26, 2012 at 1:00 pm

                mas, mau nanya, programnya blm bisa baca QR code yg berasal dari foto yaa..? klo mas tau perintahnya, share donk..😀

                • July 26, 2012 at 1:17 pm

                  Maksud dari foto ini apa ya ?
                  Yg jelas dari aplikasinya kan udah bisa buat QRCode dari tab Encode trus disimpan dalam bentuk file kemudian dibaca lagi dari tab Decode.

                  • Bondan
                    July 26, 2012 at 2:43 pm

                    begini mas, klo misalkan kita memiliki QRcode yg telah diprint, lalu ingin difoto melalui webcam, apakah QRcode yg kita foto sudah terbaca dan diterjemahkan ke dalam bentuk teks?

                    • July 26, 2012 at 3:06 pm

                      Coba library yg ini dulu om, klo yg gratis belum ketemu😀.

  10. Bondan
    July 26, 2012 at 3:12 pm

    ok sip.. terima kasih mas atas bantuannya.. semoga ilmunya makin bertambah..🙂

    • July 26, 2012 at 3:34 pm

      Aminn🙂

  11. August 1, 2012 at 6:47 pm

    kalo di vb6 bisa gak mz

    • August 4, 2012 at 10:21 am

      Maksudnya ???

  12. buya
    August 4, 2012 at 11:20 am

    om saya tanya nih, ceritanya ane install aplikasi di kompi client, tapi ada problem
    ketika testing untuk transaksi pemesanan barang, malah error pesannya ” Aplication has stoped working”
    anehnya kalo nambah data master lancar, hanya transaksinya aja yang g bisa😕
    ini sudah di coba di dua kompi

    mungkin om bisa kasih solusi >:D<
    makasih…

    • August 4, 2012 at 12:56 pm

      Coba non-aktifkan error handler/perangkap error pada saat proses transaksinya biar keliatan errornya.

      • buya
        August 6, 2012 at 12:46 pm

        kalo error handler dari projectnya udh g ada om
        kalo msih di compile di vbnya masih bisa untk save trx.
        ni pas errornya ketika pas control save om, emangnya juga pas di trx ini menyimpan ke 3 table sekaligus, apa karena itu ya, soalnya pas di master bisa dan hanya ngsave ke 1 table, bisa ga save k 3 table sekaligus gitu om ?
        makasih…

        • August 6, 2012 at 1:05 pm

          Emg kode nyimpan transaksinya g mana om ?

  13. buya
    August 8, 2012 at 7:26 pm

    ini om codenya

    Dim i As Variant

    For i = 1 To LvPesan.ListItems.Count

    Call BukaTutupRs(rsTrans_Pesan)
    conn.Execute “insert into TRANS_PESAN values(‘” & TNoPesan.Text & “‘,'” & DTgl_Beli & “‘,'” & LblTotal2.Caption & “‘,'” & LblUbay.Caption & “‘,'” & lblUkem.Caption & “‘,'” & FLogin.TUser.Text & “‘,'” & TIdAng.Text & “‘,'” & TIdKol.Text & “‘)”

    Call BukaTutupRs(rsHistoryTrx)
    conn.Execute “insert into HISTORY_TRX values(‘” & TNoPesan.Text & “‘,'” & DTgl_Beli & “‘,'” & DTUpdate & “‘,'” & TIdKol.Text & “‘,'” & TIdAng.Text & “‘,'” & TNmAng.Text & “‘,'” & LvPesan.ListItems(i).SubItems(2) & “‘,'” & LvPesan.ListItems(i).SubItems(4) & “‘,'” & LvPesan.ListItems(i).SubItems(3) & “‘)”

    rsTem_Pesan.MoveFirst
    While Not rsTem_Pesan.EOF
    conn.Execute “insert into DETAIL_PESAN values(‘” & TNoPesan.Text & “‘,'” & LvPesan.ListItems(i).SubItems(1) & “‘,'” & LvPesan.ListItems(i).SubItems(4) & “‘,'” & LvPesan.ListItems(i).SubItems(5) & “‘,'” & LvPesan.ListItems(i).SubItems(3) & “‘,'” & LvPesan.ListItems(i).SubItems(2) & “‘,'” & TIdAng.Text & “‘)”
    rsTem_Pesan.MoveNext
    Wend

    Next i

    gmn bner ga om ?
    makasih….

    • August 9, 2012 at 8:28 am

      Coba seperti ini om :

      Private Sub cmdTes_Click()
          Dim i As Integer
      
          conn.Execute "insert into TRANS_PESAN values('" & TNoPesan.Text & "','" & DTgl_Beli & "','" & LblTotal2.Caption & "','" & LblUbay.Caption & "','" & lblUkem.Caption & "','" & FLogin.TUser.Text & "','" & TIdAng.Text & "','" & TIdKol.Text & "')"
          conn.Execute "insert into HISTORY_TRX values('" & TNoPesan.Text & "','" & DTgl_Beli & "','" & DTUpdate & "','" & TIdKol.Text & "','" & TIdAng.Text & "','" & TNmAng.Text & "','" & LvPesan.ListItems(i).SubItems(2) & "','" & LvPesan.ListItems(i).SubItems(4) & "','" & LvPesan.ListItems(i).SubItems(3) & "')"
              
          For i = 1 To LvPesan.ListItems.Count
              conn.Execute "insert into DETAIL_PESAN values('" & TNoPesan.Text & "','" & LvPesan.ListItems(i).SubItems(1) & "','" & LvPesan.ListItems(i).SubItems(4) & "','" & LvPesan.ListItems(i).SubItems(5) & "','" & LvPesan.ListItems(i).SubItems(3) & "','" & LvPesan.ListItems(i).SubItems(2) & "','" & TIdAng.Text & "')"
          Next i
      End Sub
      

      Trus waktu insert usahan menyebutkan nama fieldnya contoh :

      insert into TRANS_PESAN (no_pesanan, tgl_beli, ...)
      
  14. September 4, 2012 at 4:09 pm

    Asslm.. Kak boleh bantu konversi dari C#.net ke vb6 gak kak?….
    terimakasih sebelumnya kak..

  15. New Bie
    March 22, 2013 at 11:46 am

    Omm.. Untuk program QRcode vb6, library untuk decode vb6 nya koq ga ada ..??

    begini coding nya :

    decodedString = decoder.decodevb6(qrCodeImage) ‘object doesn’t support this property or method

    boleh tau ga coding decodevb6 gimana ??

    • March 22, 2013 at 2:51 pm

      Bukannya disini, sudah sy sertakan contohnya om ?

  16. new user
    May 2, 2013 at 10:16 pm

    om admin, tolong donk ane dkasih tau klo bikin qr code dari vb, lalu bs i cetak dengan printer barcode menggunakan stiker continuous…

    • May 3, 2013 at 8:27 am

      Coba main-main kesini aja om, ada pilihan QR Codenya juga

  17. yadi
    November 26, 2013 at 10:20 am

    om mau tanya,saya sudah download sournya, untuk yang vb6 kok ada error activeX component can’t create object …mohon bantuannya om

  1. No trackbacks yet.
Comments are closed.
%d bloggers like this: