DLL'den Dynamic Array ile Sonuc Alma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
lng
Üye
Mesajlar: 7
Kayıt: 22 Eki 2005 07:47

DLL'den Dynamic Array ile Sonuc Alma

Mesaj gönderen lng »

Selam,

Internette aradim ama pek dogru bir kaynaga ulasamadim. Delphi icerisinde olusturulan bir DLL'den Dynamic Array ile programa veri gonderme olasiligi var midir? Ya da iki boyutlu, kayit sayisi onceden bilinmeyen bir tablo nasil gonderilir?

Tesekkurler,
lng

Not: Burayi tavsiye eden arkadaslarima tesekkur ederim. :)
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

Peki hiç denedinmi?
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Eğer DLL'i Delphi'de kullanacaksan tabii ki mümkün. Sadece ShareMem Unitini de kullanman gerekiyor.

Diğer bir dilden bu DLL'i kullanacaksan emin değilim. Delphi dynamic array'i kendine göre yorumlar. Diğer bir dil bunu anlamayabilir. Denemek lazım.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba ,
viewtopic.php?t=9342&highlight=sharemem

ShareMem pekte güvenli değil.
iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

Selam,

Eğer DLL dosyasını da sen yazıyorsan problem yok. Sadece şuna dikkat etmelisin: Bellekten yer alma ve iade etme rutinleri olarak Windows API'lerini kullan. Yani Getmem, New yerine GlobalAlloc, iade etme rutinleri yerine de sanırım GlobalFree (tam hatırlamıyorum, WinHelp'te var) kullanırsan, DLL'den her türlü bilgiyi alabilirsin. Tabii GlobalAlloc ile bellekten yer alırken cast etmen gerekecek.

Kolay gelsin,
Bahadır Alkaç

NOT: Daha önce bu fonksiyonları kullanarak DLL'den çok büyük diziler aldım, herhangi bir problem veya bellek kaçağı ile de karşılaşmadım.
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

Coderlord vakti zamanında, Memik yanık'ın bir sorusu üzerine delphi'nin stringleri ve dynamic arrayları nasıl hafızada tuttuğunu araştırmış. Bunu bir incele derim fikir vermesi açısından.

viewtopic.php?t=6675

Bu konu hakkında bu yazıyı buldum.

http://delphi.about.com/od/objectpascal ... 03003a.htm

En mantıklısı @Vkamadan'ın verdiği linkte tartışıldığı gibi FastSharemem'i kullanmak gibi geliyor bana. Klasik sharemem'i kullanınca Dll'nin yanında BorlandMM.dll yi vermek gerekiyor.

Ayrıca @Opt2000 nin bahsettiği gibi direk API Kullanımıda bir çözüm. Eğer o apilerle hafızada yer ayırıp, o hafızanın adresini gönderirseniz o adresi bir array değişkeni gibi kullanabilirsiniz. (viewtopic.php?t=12119) Ama dizinin büyüklüğünü length() ile ölçemezsiniz. Onun için dizinin boyunuda bişekilde almanız lazım dll'den. Bu yöntemde zahmet verebilir.
Cevapla