Aracılığıyla paylaş


Dinamik Veri Değişimi Hakkında

Windows, uygulamalar arasında veri aktarmak için çeşitli yöntemler sağlar. Yöntemlerden biri Dinamik Veri Değişimi (DDE) protokollerini kullanmaktır. DDE protokolü, bir dizi ileti ve yönergedir. Verileri paylaşan uygulamalar arasında ileti gönderir ve uygulamalar arasında veri alışverişi yapmak için paylaşılan belleği kullanır. Uygulamalar, bir kerelik veri aktarımları ve yeni veriler mevcut oldukça uygulamaların güncellemeleri birbirlerine gönderdiği sürekli veri alışverişleri için DDE protokolünü kullanabilir.

Windows, Dinamik Veri Değişimi Yönetim Kitaplığı'nı (DDEML) de destekler. DDEML, uygulamaların veri paylaşmak için kullanabileceği bir dinamik bağlantı kitaplığıdır (DLL). DDEML, bir uygulamaya DDE özelliği ekleme görevini basitleştiren işlevler ve iletiler sağlar. Bir uygulama DDE iletilerini doğrudan göndermek, göndermek ve işlemek yerine DDEML işlevlerini kullanarak DDE konuşmalarını yönetir. (DDE konuşması, istemci ve sunucu uygulamaları arasındaki etkileşimdir.)

DDEML ayrıca DDE uygulamalarının paylaştığı dizeleri ve verileri yönetmek için bir tesis sağlar. DDE uygulamaları, paylaşılan bellek nesneleri için atomlar ve işaretçiler kullanmak yerine, dizeleri ve veri tutamaçlarını tanımlayan ve bellek nesnelerini tanımlayan dize tanıtıcıları oluşturur ve değiştirir. DDEML, bir sunucu uygulamasının desteklediği hizmet adlarını kaydetmesini de mümkün kılar. Adlar, sunucuya bağlanmak için adları kullanabilen sistemdeki diğer uygulamalara yayınlanabilir. Ayrıca DDEML, DDE protokollerini tutarlı bir şekilde uygulamaya zorlayarak DDE uygulamaları arasında uyumluluk sağlar.

İleti tabanlı DDE protokollerini kullanan mevcut uygulamalar, DDEML kullananlarla tamamen uyumludur. Başka bir ifadeyle, ileti tabanlı DDE kullanan bir uygulama konuşmalar oluşturabilir ve DDEML kullanan uygulamalarla işlem gerçekleştirebilir. DDEML'nin birçok avantajı nedeniyle, yeni uygulamalar DDE iletileri yerine bunu kullanmalıdır. DDEML'nin API öğelerini kullanmak için DDEML üst bilgi dosyasını kaynak dosyalarınıza eklemeniz, DDEML kitaplığıyla bağlantı oluşturmanız ve DDEML dinamik bağlantı kitaplığının sistemin arama yolunda olduğundan emin olmanız gerekir.

Bu bölümde aşağıdaki konular ele alınıyor.

Dinamik Veri Değişimi Protokolü

Windows ileti tabanlı bir mimariye sahip olduğundan, iletileri geçirmek, uygulamalar arasında otomatik olarak bilgi aktarmak için en uygun yöntemdir. Ancak, iletiler veri geçirmek için yalnızca iki parametre (wParam ve lParam) içerir. Sonuç olarak, uygulamalar arasında birkaç sözcükten fazla bilgi geçtiğinde bu parametreler dolaylı olarak diğer veri parçalarına başvurmalıdır. DDE protokolü, uygulamaların genel atomlar ve paylaşılan bellek tanıtıcıları yoluyla daha büyük veri parçalarını geçirmek için wParam ve lParam parametrelerini tam olarak nasıl kullanması gerektiğini tanımlar. DDE protokolü, genel atomları ve paylaşılan bellek nesnelerini ayırmaya ve silmeye yönelik belirli kurallara sahiptir.

Küresel atom, bir karakter dizisine referanstır. DDE protokolünde atomlar veri alışverişinde bulunan uygulamaları, değiştirilen verilerin doğasını ve veri öğelerini kendileri belirler. Atomlar hakkında daha fazla bilgi için bkz. atomlar hakkında .

Windows Dinamik Veri Değişimi için kullanımlar

DDE, sürekli kullanıcı etkileşimi gerektirmeyen veri alışverişleri için en uygun olandır. Genellikle bir uygulama, kullanıcının veri alışverişinde bulunan uygulamalar arasında bağlantı kurması için bir yöntem sağlar. Ancak bu bağlantı kurulduktan sonra uygulamalar daha fazla kullanıcı katılımı olmadan veri alışverişi gerçekleştirir.

DDE, çok çeşitli uygulama özellikleri uygulamak için kullanılabilir; örneğin:

  • Borsa güncelleştirmeleri, bilimsel araçlar veya işlem denetimi gibi gerçek zamanlı verilere bağlanma.
  • Grafik uygulaması tarafından üretilen bir grafiği içeren sözcük işleme belgesi gibi bileşik belgeler oluşturma. DDE kullanıldığında, kaynak veriler değiştirildiğinde grafik değişirken belgenin geri kalanı aynı kalır.
  • Süresi geçmiş hesaplar için veritabanını sorgulayan bir elektronik tablo gibi uygulamalar arasında veri sorguları gerçekleştirme.

Kullanıcının Bakış Açısından Dinamik Veri Değişimi

Aşağıdaki örnek, kullanıcının bakış açısından görüldüğü gibi iki DDE uygulamasıyla nasıl işbirliği yapabildiğini göstermektedir.

Elektronik tablo kullanıcısı, New York Stock Exchange'de belirli bir hisse senedinin fiyatını izlemek için Microsoft Excel'i kullanmak istiyor. Kullanıcının Teklif adlı ve NYSE verilerine erişimi olan bir uygulaması vardır. Excel ile Quote arasındaki DDE konuşması aşağıdaki gibi gerçekleşir:

  • Kullanıcı, verileri ve ilgili konuyu (NYSE) sağlayacak uygulamanın adını (Teklif) sağlayarak konuşmayı başlatır. Sonuçta elde edilen DDE konuşması, belirli hisse senetleri için teklif istemek için kullanılır.
  • Excel, uygulama ve konu adlarını sistemde çalışmakta olan tüm DDE uygulamalarına yayınlar. Alıntı yanıt verir ve Excel ile NYSE konusu hakkında bir konuşmaya girer.
  • Daha sonra kullanıcı, belirli bir hisse senedi teklifi değiştiğinde elektronik tablonun otomatik olarak güncelleştirildiğini isteyen bir hücrede elektronik tablo formülü oluşturabilir. Örneğin, kullanıcı aşağıdaki Excel formülünü belirterek ZAXX hisse senedinin satış fiyatında bir değişiklik olduğunda otomatik güncelleştirme isteyebilir: ='Quote'|' NYSE'! ZAXX
  • Kullanıcı ZAXX hisse senedi teklifinin otomatik güncelleştirmesini istediği zaman sonlandırabilir. Ayrı olarak oluşturulan diğer veri bağlantıları (diğer hisse senetleri için teklifler gibi) aynı NYSE konuşmaları altında hala etkin kalacaktır.
  • Kullanıcı ayrıca NYSE konusunda Excel ile Quote arasındaki konuşmanın tamamını sonlandırabilir, böylece yeni bir konuşma başlatmadan bu konuda belirli bir veri bağlantısı kurulmamalıdır.

Dinamik Veri Değişimi Kavramları

Aşağıdaki bölümlerde dinamik veri alışverişini anlamada önemli olan önemli kavramlar ve terimler açıklanmaktadır.

İstemci, Sunucu ve Konuşma

DDE'ye katılan iki uygulamanın bir DDE konuşmasına katıldığı söylenir. Konuşmayı başlatan uygulama DDE istemci uygulamasıdır; istemcisini yanıtlayan uygulama, DDE sunucu uygulamasıdır. Bir uygulama aynı anda birkaç konuşma yapabilir ve bazılarında istemci, diğerlerinde ise sunucu olarak hareket edebilir.

DDE konuşması, katılan uygulamaların her biri için bir pencere olmak üzere iki pencere arasında gerçekleşir. Pencere, uygulamanın ana penceresi olabilir; çok belgeli arabirim (MDI) uygulamasında olduğu gibi belirli bir belgeyle ilişkilendirilmiş bir pencere; veya tek amacı DDE iletilerini işlemek olan gizli (görünmez) bir pencere.

Bir DDE konuşması, konuşmaya katılan pencerelerin çiftli tutamaçları aracılığıyla tanımlandığından, başka bir pencereyle birden fazla konuşmada herhangi bir pencere yer almamalıdır. İstemci uygulamasının veya sunucu uygulamasının belirli bir sunucu veya istemci uygulamasıyla yaptığı konuşmaların her biri için farklı bir pencere sağlaması gerekir.

Bir uygulama, her konuşma için gizli bir pencere oluşturarak bir istemci ve sunucu penceresi çiftinin hiçbir zaman birden fazla konuşmaya dahil olmamasını sağlayabilir. Bu pencerenin tek amacı DDE iletilerini işlemektir.

Uygulama, Konu ve Öğe Adları

DDE protokolü, uygulama, konu ve öğe adlarının üç düzeyli hiyerarşisiyle istemci ile sunucu arasında geçirilen veri birimlerini tanımlar.

Her DDE konuşması, uygulama adı ve konu başlığı tarafından benzersiz bir şekilde tanımlanır. DDE konuşmasının başında, istemci ve sunucu uygulama adını ve konusunu belirler. Uygulama adı genellikle sunucu uygulamasının adıdır. Örneğin, Excel bir konuşmada sunucu gibi davrandığında, uygulama adı Excel'dir.

DDE konusu, konuşma sırasında birden çok veri öğesinin "tartışıldığı" (değiştirilebileceği) verilerin genel bir sınıflandırmasıdır. Dosya tabanlı belgeler üzerinde çalışan uygulamalar için konu genellikle bir dosya adıdır. Diğer uygulamalar için konu, uygulamaya özgü bir addır.

İstemci ve sunucu penceresi bir DDE konuşmasını birlikte işlediğinden, konuşmayı tanımlayan uygulama adı ve konu başlığı konuşma sırasında değiştirilemez.

DDE veri öğesi, uygulamalar arasında değiş tokuş edilen konuşma konusuyla ilgili bilgilerdir. Veri öğesinin değerleri sunucudan istemciye veya istemciden sunucuya geçirilebilir. Veriler, standart pano biçimlerinden herhangi biriyle veya kayıtlı bir pano formatıyla aktarılabilir. Bağlantı adlı özel, kayıtlı biçim, DDE konuşmasında bir öğeyi tanımlar. Pano biçimleri hakkında daha fazla bilgi için bkz. pano .

Sistem Konusu

Uygulamalar sistem konusunu her zaman desteklemelidir. Bu konu, başka bir uygulamayı genel olarak ilgilendirebilecek bilgiler için bir bağlam sağlar.

Veri öğesi değerleri CF_TEXT pano biçiminde işlenmelidir. Sistem konusu için öğe değerlerinin tek tek öğeleri sekme karakterleriyle sınırlandırılmalıdır. Aşağıdaki tabloda sistem konusu için bazı öğeler önermektedir.

Madde Açıklama
Biçim Uygulamanın işleyebileceği pano biçimlerinin sekmeyle ayrılmış listesi. Genellikle, CF_ biçimleri adların "CF_" bölümü kaldırılarak listelenir (örneğin, CF_TEXT "METİN" olarak listelenir).
Yardım DDE sunucusunun nasıl kullanılacağını kısaca açıklayan metin.
İade Mesajı En son kullanılan WM_DDE_ACK iletisi için destekleyici detay. Bu öğe, uygulamaya özgü sekiz bitten fazla dönüş verisi gerektiğinde kullanışlıdır.
Durum Uygulamanın geçerli durumunun göstergesi. Bir sunucu bu sistem konusu öğesi için WM_DDE_REQUEST bir ileti aldığında, uygun şekilde Meşgul veya Hazır dizesini içeren bir WM_DDE_DATA iletisi göndererek yanıt vermelidir.
SysItems Uygulamanın desteklediği sistem konusu öğelerinin listesi.
KonuÖgesi Listesi Sistem konusu dışındaki her konu için TopicItemList'in desteklenmesi dışında SysItems öğesine benzer. Bu, herhangi bir konu başlığı altında desteklenen öğelere göz atılmasına olanak tanır. Öğeler numaralandırılamıyorsa, bu öğe yalnızca "TopicItemList" içermelidir.
Konular Uygulamanın geçerli zamanda desteklediği konuların listesi; bu liste bir andan diğerine farklılık gösterebilir.

 

DDE konuşması başladıktan sonra istemci sunucuyla bir veya daha fazla kalıcı veri bağlantısı kurabilir. Veri bağlantısı, belirtilen bir veri öğesinin değeri değiştiğinde sunucunun istemciye bildirimde bulunduğu bir iletişim mekanizmasıdır. Veri bağlantısı, veri bağlantısı veya DDE konuşmasının kendisi sonlandırılana kadar bu bildirim işleminin devam etmesi anlamında kalıcıdır.

İki tür kalıcı DDE veri bağlantısı vardır: ılık ve sıcak. Sıcak veri bağlantısında, sunucu istemciye veri öğesinin değerinin değiştiğini bildirir, ancak sunucu veri değerini istemci isteyene kadar istemciye göndermez. Sık erişimli veri bağlantısında, sunucu değiştirilen veri değerini hemen istemciye gönderir.

Sıcak veya sık erişimli veri bağlantılarını destekleyen uygulamalar genellikle kullanıcının uygulamalar arasında bağlantı kurmasını sağlamak için Düzenle menüsünde Kopyala veya Bağlantıyı Yapıştır komutunu sağlar.

Atomlar ve Paylaşılan Bellek Nesneleri

DDE (Dinamik Veri Değişimi) iletilerinin bazı bağımsız değişkenleri global atomlar veya paylaşılan bellek nesneleridir. Bu bağımsız değişkenleri kullanan uygulamaların ne zaman ayrılıp silineceği konusunda açık kurallara uyması gerekir. Her durumda, ileti gönderenin, PostMessage işlevinin başarısız olması gibi bir hata koşulu nedeniyle hedeflenen alıcının alamayacağı atom veya paylaşılan bellek nesnesini silmesi gerekir.

DDE, paylaşılan bellek nesnelerini üç amaçla kullanır:

  • Değiş tokuş edilecek veri öğesi değerini taşımak için. Bu, WM_DDE_DATA ve WM_DDE_POKE iletilerinde hData parametresi tarafından başvurulan bir öğedir.
  • İletideki seçenekleri taşımak için. Bu, WM_DDE_ADVISE iletisinde hOptions parametresi tarafından başvurulan bir öğedir.
  • Komut yürütme dizesini taşımak için. Bu, WM_DDE_EXECUTE iletisindeki hCommands parametresi ve buna karşılık gelen WM_DDE_ACK iletisi tarafından başvurulan bir öğedir.

DDE paylaşılan bellek nesnesi alan bir uygulamanın bunu salt okunur olarak kabul etmesi gerekir. Uygulama, serbest veri alışverişi için nesneyi karşılıklı okuma-yazma alanı olarak kullanmamalıdır.

DDE atomuyla olduğu gibi, bir uygulama belleği etkili bir şekilde yönetmek için paylaşılan bir bellek nesnesini serbest bırakır. Uygulamanın ayrıca bellek nesnelerini kilitlemesi ve kilidini açması gerekir.

Dinamik Veri Değişimi İletilerine Genel Bakış

DDE ileti tabanlı bir protokol olduğundan hiçbir işlev veya kitaplık kullanmaz. Tüm DDE işlemleri, istemci ve sunucu pencereleri arasında belirli tanımlı DDE iletileri geçirilerek gerçekleştirilen işlemlerdir.

Dokuz DDE iletisi vardır; bu iletilerin sembolik sabitleri DDE üst bilgi dosyasında tanımlanır. Çeşitli DDE iletileri için belirli yapılar da bu üst bilgi dosyasında tanımlanır.

Aşağıdaki tabloda DDE iletileri özetlenmektedir.

İleti Açıklama
WM_DDE_ACK İleti almayı veya almadığını kabul eder.
WM_DDE_ADVISE Sunucu uygulamasından her değiştiğinde bir veri öğesi için güncelleştirme veya bildirim sağlamasını ister. Bu, kalıcı bir veri bağlantısı oluşturur.
WM_DDE_DATA İstemci uygulamasına bir veri öğesi değeri gönderir.
WM_DDE_EXECUTE Bir dizeyi sunucu uygulamasına gönderir; bu uygulamanın dizeyi bir dizi komut olarak işlemesi beklenir.
WM_DDE_INITIATE İstemci ve sunucu uygulamaları arasında bir konuşma başlatır.
WM_DDE_POKE Sunucu uygulamasına bir veri öğesi değeri gönderir.
WM_DDE_REQUEST Sunucu uygulamasından bir veri öğesinin değerini sağlamasını istemektedir.
WM_DDE_TERMINATE Bir konuşmayı sonlandırır.
WM_DDE_UNADVISE Kalıcı bir veri bağlantısını sonlandırır.

 

Uygulama, WM_DDE_INITIATEyanıt olarak gönderilen WM_DDE_INITIATE iletisini veya WM_DDE_ACK iletisini vermek için SendMessage çağırır. Diğer tüm iletiler PostMessagetarafından gönderilir. Bu çağrıların ilk parametresi, alıcı pencerenin tanıtıcısıdır; İkinci parametre gönderilecek iletiyi içerir; üçüncü parametre, gönderen pencereyi tanımlar; ve dördüncü parametre iletiye özgü bağımsız değişkenleri içerir.

Dinamik Veri Değişimi İleti Akışı

Tipik bir DDE konuşması aşağıdaki olaylardan oluşur:

  1. İstemci uygulaması konuşmayı başlatır ve sunucu uygulaması yanıt verir.

  2. Uygulamalar, aşağıdaki yöntemlerin herhangi birine veya tümüne göre veri alışverişi yapar:

      • Sunucu uygulaması, istemcinin isteği üzerine istemciye veri gönderir.
      • İstemci uygulaması, sunucu uygulamasına istenmeyen veriler gönderir.
      • İstemci uygulaması, bir veri öğesi değiştiğinde (sıcak veri bağlantısı) istemciyi bilgilendirmek için sunucu uygulamasını ister.
      • İstemci uygulaması, veriler her değiştiğinde (sık erişimli veri bağlantısı) sunucu uygulamasından veri göndermesini ister.
      • Sunucu uygulaması, istemcinin isteği üzerine bir komut yürütür.
  3. İstemci veya sunucu uygulaması konuşmayı sonlandırır.

bir istemciden veya sunucudan gelen istekleri işleyen bir uygulama penceresi, bunları kesinlikle alındıkları sırayla işlemelidir.

bir istemci birden fazla sunucuyla konuşmalar kurabilir; bir sunucu birden fazla istemciyle konuşma yapabilir. Birden fazla kaynaktan gelen iletileri işlerken, bir istemcinin veya sunucunun konuşmanın iletilerini zaman uyumlu olarak işlemesi gerekir, ancak tüm iletileri zaman uyumlu olarak işlemesi gerekmez. Başka bir deyişle, gerektiğinde bir konuşmadan diğerine geçiş yapabilir.

Bir uygulama, bir DDE yanıtı beklediği için gelen bir isteği işleyemiyorsa, kilitlenmeyi önlemek amacıyla, DDEACK yapısının fBusy üyesi 1 olarak ayarlanmış, WM_DDE_ACK mesajı göndermelidir. Bir uygulama, herhangi bir nedenle bir isteği kısa sürede işleyemiyorsa, meşgul WM_DDE_ACK iletisini de gönderebilir.

Bir uygulama, bir istemcinin veya sunucunun belirli bir süre içinde bir iletiye yanıt verme hatasını işleyebilmelidir. Zaman aşımı aralığı uygulamanın yapısına ve kullanıcının sisteminin yapılandırmasına (bir ağa bağlı olup olmadığı dahil) bağlı olarak farklılık gösterebileceğinden, uygulama kullanıcının aralığı belirtmesi için bir yol sağlamalıdır.

Parametre Paketleme İşlevleri

Birçok DDE iletisinin lParam parametresi iki veri parçası içerir. Örneğin, WM_DDE_DATA iletisinin lParam bir veri tutamacı ve bir atom içerir. Uygulamalar, tanıtıcıyı ve atomu lParam parametresine paketlemek için PackDDElParam işlevini ve değerleri kaldırmak için de UnpackDDElParam işlevini kullanmalıdır. DDE uygulamaları, bir DDE konuşması sırasında gönderilen tüm iletiler için PackDDElParam ve UnpackDDElParam kullanmalıdır.

Uygulamalar, ReuseDDElParam ve FreeDDElParamişlevlerinide kullanabilir. ReuseDDElParam, DDE uygulamasının paketlenmiş bir lParam parametresini yeniden kullanmasına olanak tanır ve uygulamanın konuşma sırasında gerçekleştirmesi gereken bellek yeniden yükleme sayısını azaltmaya yardımcı olur. Bir uygulama, DDE konuşması sırasında alınan veri tanıtıcısıyla ilişkili belleği serbest bırakmak için FreeDDElParam kullanabilir.

Dinamik Veri Değişimi ve Kimliğe Bürünme

Sunucunun bir istemcinin kimliğine bürünebilmesine izin vermek için istemci, DdeSetQualityOfService işlevini çağırır. SECURITY_IMPERSONATION_LEVEL yapısı, sunucunun gerçekleştirebileceği kimliğe bürünme düzeyini denetlemek için kullanılır.

DDE sunucusu, ImpersonateDdeClientWindow işlevini çağırarak DDE istemcisinin kimliğine bürünebilir. DDEML sunucusu DdeImpersonateClient işlevini kullanmalıdır.