March 12, 2013

Ali hocam oradan yararlanıyorum zaten ama pek yeterli geldiği söylenemez :(

Bu arada kodların son hali sanki biraz daha hoş oldu ha ne dersiniz?

import core.runtime;
import std.stdio;
import core.memory;
import core.sys.windows.windows;
/* Runtime Dll Library */
class RDL{
	void call(){
		HMODULE h;
		FARPROC fp;
		h = cast(HMODULE) Runtime.loadLibrary("user32.DLL");
		if (h is null){
			printf("error loading user32.dll\n");
			return;
		}
		fp = GetProcAddress(h, "MessageBoxA");
		if (fp is null){
			printf("error loading symbol MessageBoxA()\n");
			return;
		}
		MessageBoxA = cast(typeof(MessageBoxA)) fp;
		MessageBoxA(null, cast(char *) "a", "Error", MB_OK | MB_ICONEXCLAMATION);

		if (!Runtime.unloadLibrary(h))
		{   printf("error freeing user32.dll\n");
			return;
		}
	}

	HMODULE h;
	string name;
	this(string name = "user32.DLL"){
		this.name = name;
		h = cast(HMODULE) Runtime.loadLibrary(name);
		if (h is null){
			writeln("error loading "~name~"\n");
			return;
		}
	}

	void load(T)(string name, ref T z){
		FARPROC fp = GetProcAddress(h, cast(char*) name);
		if (fp is null){
			writeln("error loading symbol "~name~ "()\n");
			return;
		}
		z = cast(typeof(z)) fp;
	}


	~this(){
		if (!Runtime.unloadLibrary(h))
		{
			writeln("error freeing "~name~"\n");
			return;
		}
	}
}


struct tagRECT{
	int Left;
	int Top;
	int Right;
	int Bottom;
}

extern (Windows){

	short function (INT z) GetAsyncKeyState;
	int function(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) MessageBoxA;
	bool function(tagRECT* z) ClipCursor;

}

int main(){
	auto rdl = new RDL("user32.dll");
	rdl.load("ClipCursor", ClipCursor);
	rdl.load("MessageBoxA", MessageBoxA);
	rdl.load("GetAsyncKeyState", GetAsyncKeyState);

	writeln("Mesaj kutusu");
	writeln("Mesaj kutusunu kapatırken istersen sol shift tuşuna basılı tut ne dersin?");
	MessageBoxA(null, "talha", "talha", 0);

	writeln("Mesaj kutusu");
	if (GetAsyncKeyState(0x10)){
		writeln("Beni kırmadığın için teşekkürler :)");
		writeln("Ve şimdi sıradaki test :)");
	}

	writeln("Fare imleci hareketi kısıtlanıyor");
	ClipCursor(new tagRECT(500, 500, 560, 560));

	while(1){
	}
   return 0;
}

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 12, 2013

Ama benim yapmak istediğim tam olarak bu değil. Bu halinde yine mecburen derlemeden önce işlevleri belirtmek gerekiyor. Belirtmeden yapmak gerek ama nasıl olacak :S

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 12, 2013

Bu arada Salih hocam eğer bir tane D ile hazırlanmış bir dll hazırlarsanız (ben de hata veriyor her nedense :S)

Ve eğer bu diğer dll'ler gibi çalışırsa RhS'ye plugin olayını çok kolay ekleyebiliriz.

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 12, 2013

Hiç deneyimim yok ama DLL'ler için şu sayfa var:

http://dlang.org/dll.html

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 13, 2013

Benim yaptığım deneme şu şekilde:

import a, b;

int main(string[] args) {
 char arg = args.length > 1 ? args[1][0] : 255;

 switch(arg) {
   case 'a': a_main(); break;
   case 'b': b_main(); break;
   default:
 }
 return 0;
}

Yukarıdan anlaşılacağı üzere 2 tane a ve b isminde modüllerimiz var. İçleri de çok basit ama önemli olan build.bat ve daha az ve sanırım gerekli olan def dosyaları:

Alıntı:

>
> @echo off
> dmd -ofa.dll -L/IMPLIB a.d dll.d a.def
> dmd -ofb.dll -L/IMPLIB b.d dll.d b.def
> dmd test.d a.lib b.lib
> ```

> **def dosyaları ise şöyle:**
> LIBRARY "a.dll"
> EXETYPE NT
> SUBSYSTEM WINDOWS
> CODE SHARED EXECUTE
> DATA WRITE
>

Aynı şekilde modüllerden a olanını da vereyim:

module a;
import std.c.stdio;

export void a_main() {
printf("a.dll'deki main()'deyim...\n");
}


**Dip Not:** Bu arada, bir de dll.d dosyası var ki o da DMD'nin paket dosyası içinde mydll'de mevcut. Windows için standart bir şey ve sanırım çok gerekli. Zaten senin yaptığı denemede mevcut olduğunu gördüm.

Başarılar...

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
March 14, 2013

Salih bu örnek oldukça yararlı, bu türden örnekleri bir yerde toparlasak mı acaba?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 18, 2013

Haklısın ağabey; ama bu tür şeyler ne yaparsak edelim, bir yere toplasak bile, samanlıktaki iğne misali kaybolup gidecekler. O yüzden bir orkide çiçeği gibi sürekli kendini yenileyen, yeni çiçekler açtıkça (kodlar yazıldıkça) bizi haberdar eden bir sisteme ihtiyacımız var. Bu konuda aklıma sadece top10 sistemi geliyor...

Biliyorsunuz sağda solda bir sürü CMS benzeri web script'i var. Bunlardan herhangi birini (basitini) sitemize uyarlayıp hemen yüklemeye ve oylamaya başlayabiliriz. Tabi bu sistemin içinde kodları güzel gösteren (prettify codes) uygulama da olsa güzel olurdu...:)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 18, 2013

şimdilik bir havuz yeterli gibi geliyor bana, tAp-on işlerine aklım hiç basmıyor.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 27, 2013

Zekeriya, biliyorum şu sıralar RhS'yi geliştirmeye ve belki de devrim niteliğinde plug-in olayını (DLL kütüphaneleri) devreye sokmaya çalışıyorsun. Acaba RhS kodlarını, örneğin rhs.ddili.org adresinde deneyebileceğimiz bir kurulum yapabilir miyiz?

Tabi Ali hocamdan da bu konuda izin almalıyız. Ayrıca sunucuda başka bir script'i çalıştırabilmek için bir cgi-bin dizini gibi bir şey uyarlayabilir miyiz? Yani onun içinde yazdığım D programları çalışabilsin ve belki böylece doğrudan olmasa da dolaylı yollardan çalıştırmak (indirect running) mümkün olabilir.

Amacım artık RhS ile uygulama geliştirmek de ve ilk olarak yukarıda bahsettiğimiz kod havuzunu yapmak. Tabi bunu PHP ile de yapabiliriz ama o dili öğrenmek için vakit kaybetmek istemiyorum...:)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 27, 2013

Alıntı:

>

Zekeriya, biliyorum şu sıralar RhS'yi geliştirmeye ve belki de devrim niteliğinde plug-in olayını (DLL kütüphaneleri) devreye sokmaya çalışıyorsun. Acaba RhS kodlarını, örneğin rhs.ddili.org adresinde deneyebileceğimiz bir kurulum yapabilir miyiz?

Elbette yapabiliriz. ddili.org sunucu olarak apache kullanıyormuş. 2.0 sürümünü http proxy yardımı ile vibe sunucusu üzerinden çalıştırabiliriz. Yani rhs.ddili.org adresine girilince arkaplanda 123 gibi bir port üzerinde çalışan vibe sunucusuna bağlanmış olacak ama siteye giren ziyaretçiler bunu göremeyecek ama aklıma şu soru takıldı ddili direk bir hosting üzerinde mi yoksa bir vps sunucu üzerinde mi çalışıyor?

Ama bu tarz bir çalıştırma işlemi bazı güvenlik sorunlarını da beraberinde getirebilir.

Alıntı:

>

Amacım artık RhS ile uygulama geliştirmek de ve ilk olarak yukarıda bahsettiğimiz kod havuzunu yapmak. Tabi bunu PHP ile de yapabiliriz ama o dili öğrenmek için vakit kaybetmek istemiyorum...

Emin olun bunu ben sizden daha çok istiyorum :) PHP sentaksı gerçekten vasat durumda. Dün TÜBİTAK'tan aradılar ve uluslarası bir yarışmada Rhodeus Script projesi ile Türkiye'yi temsil etmem söylendi :) ama bir sorun var proje raporunu ingilizce olarak hazırlamak için son gün cuma (bu cuma) yani ama sanırsam halledebileceğim bilmiyorum. Yarışma eylülde pragda olacakmış.

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]