Aklımda Kalası Kelimeler

* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur

10 Aralık 2011 Cumartesi

Visual FoxPro(VFP) ile .NET DLL çağırmak(interop)

Ve VFP de öğrenmek gerekti.

Eti kakaolu bisküvimizi açtık. Bitki çayımızıda aldıktan sonra VFP yi çalıştıralım. Derin derin anlatacak vaktim yok ama ben çektim siz çekmeyin kısımlarını vereceğim.

thisform

thisform.nesneAdi.özellikAdi : Buradaki thisform reserve kelimesini kullanmazsanız form üstündeki bileşenlere erişemiyorsunuz.


SET DEFAULT TO

SET DEFAULT TO "c:\temp" : Eğer c:\temp klasöründe programınızı yazacaksanız başta varsayılan yeri bu klasör olarak mimleyin.
Avatar'ın soundtrackini dinleyelim.

DO FORM

DO FORM c:\temp\form1.scx : Formunuzu çalışır görmek isterseniz ya bu komutu Command penceresine yazın ya "Ctrl-E" kısayolunu kullanın ya da yukarıdaki kırmızı ünlenm düğmesine basın.

CREATEOBJECT

obj = CREATEOBJECT("ClsDeneme.Class") : CREATEOBJECT(sınıf adı, [param 1], [param 2]...) ile dışarıdaki dll'deki sınıftan bir nesne oluşturabilirsiniz. Tam keşfedemeden başka bir yol buldum ama oluşturduğunuz Visual FoxPro sınıfından bir nesneyide bu şekilde yaratabiliyorsunuz gibi. Gelelim beni bulduğum yönteme.
MSDN yine güzel bir anlatımla aşağıdaki bağlantılardan VFP içinde nasıl sınıf yaratabileceğinizi izah etmiş.
  1. Classes in Visual FoxPro
  2. How to: Create Classes and Subclasses
  3. How to: Add Properties to Classes
  4. How to: Add Classes and Subclasses to Class Libraries
  5. How to: Add Classes to Visual FoxPro Tools
  6. How to: Open Class Libraries


1)Tools->Class Browser
2)New Class
3)Class oluşturacağınız dosyanın yerinide belirtiyorsunuz(vfp_classtest.vcx oluşturdum)
4)Class->New Property(Class Designer açılıkken-*.vcx dosyanız File->Open ile açıkken yani-)
5)Sınıfınızı tamamladınız.Tool->Toolbox
6)Sağ tuş->Add Class Library, vcx dosyanızı seçin ve açın.
7)Dilediğiniz sınıfınızı forma sürükleyin.
8)Properties penceresinde eklediğiniz özellikleri göreceksiniz.
9)Formun koduna bu özellikleri nasıl kullanmak istiyorsanız yazın.



Aşağıdaki sınıfı RegAsm.exe ile registry ye kaydedediyor sonrasında VFP içinden çağırıyorum.
using System.Runtime.InteropServices;

namespace ClsLib
{
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ProgId("SinifDeneme.Class")]
    [ComVisible(true)]
    public class Sinif
    {
        public string SitringField;
        public string M_SitringProp { get; set; }
        public string f_Metot(object obj)
        {
            return "sdfsdf";
        }
    }
}


Bu da VFP nin Command penceresinde çalıştığım bir kaç komut:
SET DEFAULT TO "c:\temp"
m = CREATEOBJECT("SinifDeneme.Class")
MODIFY form c:\temp\form1.SCX  
ADD CLASS
ADD CLASS aaa

cem = CREATEOBJECT("SinifDeneme.Class")
ADD CLASS
cem.SitringField
print cem.SitringField
write
echo
cem.f_Metot()

ENDDEFINE
CREATE CLASS
DO FORM c:\temp\form1.scx
MODIFY FORM form1
DO "c:\program files (x86)\microsoft visual foxpro 9\viewcode.prg"
DO FORM "c:\users\administrator\documents\visual foxpro projects\form1.scx"
MODIFY CLASS ? OF c:\temp\vfp_classtest.vcx