head	1.4;
access;
symbols;
locks
	root:1.4; strict;
comment	@# @;


1.4
date	2009.12.07.00.54.42;	author root;	state Exp;
branches;
next	1.3;

1.3
date	2009.12.07.00.53.46;	author root;	state Exp;
branches;
next	1.2;

1.2
date	2009.12.07.00.49.42;	author root;	state Exp;
branches;
next	1.1;

1.1
date	2009.12.07.00.46.23;	author root;	state Exp;
branches;
next	;


desc
@/opt/nforge/var/wiki/easylogiclib/data/text/WBLibrary
@


1.4
log
@118.219.84.10;;cyberuls easylogic ;;
@
text
@[[TableOfContents]]
= Description = 

 * Windows 에서 사용할 수 있는 여러가지 라이브러리에 대한 기본 클래스 
 * 시스템 DLL 또는 외부에서 생성된 DLL을 사용할 수 있게 만들어줍니다. 
  * win32api 를 사용할 수 있게 해줍니다.

= Using DLL = 

 * winbinder 에서 제공하는 라이브러리를 사용하면 dll 파일을 로드해서 그 안에 들어있는 여러가지 함수들을 사용 할 수 있게 해준다. 
 * 예제는 winbinder/include/fi 를 보면 잘 나와있다. FreeImage 라는 dll을 로드해서 사용하는 모습이다. 
 * 하지만 여기서 문제가 하나 있다. dll은 보통 C나 C++ 로 만들어지기 때문에 몇가지 어려움이 있다. 
  * 첫째로 C++ 로 되어 있는 클래스에 대해서는 사용하는 방법을 찾지 못했다. 
  * 둘째로 C로 되어 있는 함수들은 보통 내장 자료형을 따로 정의해서 사용하는 경우가 많아서 함수마다 그것을 다 지정을 해줘야 한다. 
   * 그것때문에 WBStruct 클래스가 나오기도 했다. 구조체를 표현할 방법을 좀 더 간편하게 만들기 위해서이다. 

 * 하지만 아직까지 명확히 데이타를 주고 받는 방법을 알지 못했다. 
  * char * 의 데이타를 어떻게 넘겨줘야 할까? 넘겨준다음 어떻게 받을 수 있을까? 

= Parameter Pass Standard =

 * dll 과의 parameter 전송을 위한 표준을 마련한다. 

== about struct ==

 * 구조체는 여러가지 자료형이 하나의 자료형처럼 사용되는 경우이다. 

== about pointer == 

 * 실제 값을 가지고 있는 메모리를 가리키는 용도로 사용되는 변수이다. 
 * php에서 C에서 사용하는 포인터는 어떻게 표현할까? 
 * 포인터는 기본적으로 System에서 제공하는 메모리 주소공간을 가리킬 수 있는 크기이다. 보통은 unsigned int(4바이트) 정도의 크기를 가진다. 하지만 System 마다 다르다. 
 * 윈도우 OS 에서는 포인터 크기는 4바이트이다.

= Code =

 * 객체 생성, 관련 dll 자동으로 로드  
{{{#!vim php 
<?php  $lib = new WBLibrary('user'); ?> 
}}}

 * DLL 로드하기 (같은 이름의 dll을 두번 로드 하지 않습니다.)
{{{#!vim php 
<?php $lib->load();?> 
}}}

 * 로드된 DLL 릴리즈 하기 (꼭 실행해야 하는 함수는 아님)
{{{#!vim php 
<?php $lib->release()?> 
}}}

 * 함수 포인터 얻어오기 
{{{#!vim php 
<?php $address = $lib->getFunction('SetCapture');?> 
}}}

 * 값 포인터 얻어오기 
 * 변수 형태로 지정해서 가지고 온다. 
 * 내부에서 $var 를 &$value 형태로 고정시켜서 실제 $var의 주소와 $value 의 값이 동일한 곳을 가리키도록 한다. 
{{{#!vim php 
<?php $address = $lib->getAddress($var);?> 
}}}

 * 함수 포인터로 DLL 함수 호출 (매개변수 지정 가능, 참조 매개변수에 값 설정 가능) 
 * WBLibrary 상속한 클래스의 메소드를 호출 할 수 있게 해야함 , 구현예정 
{{{#!vim php 
<?php WBStruct::run('user', 'SetCapture', array($hwnd));?> 
}}}

 * 메모리 영역에 값 설정 
{{{#!vim php 
<?php 
WBLibrary::set($ptr, 'value');
or 
WBLibrary::set($ptr, 'value', $bytes);
?> 
}}}

 * 메모리 영역의 값 얻어오기
{{{#!vim php 
<?php 

// $bytes가 없을때는 첫째로 나타나는 NUL 문자가 나타날때 까지 읽음 
// char * 는 이걸로 대체 
// api 쪽 수정 요망 

$value = WBLibrary::get($address);  
or 

$value = WBLibrary::get($address, $bytes);

?> 
}}}
@


1.3
log
@118.219.84.10;;cyberuls easylogic ;;
@
text
@d1 1
a1 1
[[PageOfContents]]
@


1.2
log
@118.219.84.10;;cyberuls easylogic ;;
@
text
@d1 1
@


1.1
log
@118.219.84.10;;cyberuls easylogic ;;
@
text
@d3 3
a5 3
* Windows 에서 사용할 수 있는 여러가지 라이브러리에 대한 기본 클래스 
* 시스템 DLL 또는 외부에서 생성된 DLL을 사용할 수 있게 만들어줍니다. 
** win32api 를 사용할 수 있게 해줍니다.
d9 6
a14 6
* winbinder 에서 제공하는 라이브러리를 사용하면 dll 파일을 로드해서 그 안에 들어있는 여러가지 함수들을 사용 할 수 있게 해준다. 
* 예제는 winbinder/include/fi 를 보면 잘 나와있다. FreeImage 라는 dll을 로드해서 사용하는 모습이다. 
* 하지만 여기서 문제가 하나 있다. dll은 보통 C나 C++ 로 만들어지기 때문에 몇가지 어려움이 있다. 
** 첫째로 C++ 로 되어 있는 클래스에 대해서는 사용하는 방법을 찾지 못했다. 
** 둘째로 C로 되어 있는 함수들은 보통 내장 자료형을 따로 정의해서 사용하는 경우가 많아서 함수마다 그것을 다 지정을 해줘야 한다. 
*** 그것때문에 WBStruct 클래스가 나오기도 했다. 구조체를 표현할 방법을 좀 더 간편하게 만들기 위해서이다. 
d16 2
a17 6
* 하지만 아직까지 명확히 데이타를 주고 받는 방법을 알지 못했다. 
** char * 의 데이타를 어떻게 넘겨줘야 할까? 넘겨준다음 어떻게 받을 수 있을까? 

* WinPcap 라이브러리를 쓰기 위해서 이러한 규칙이 먼저 적용이 되어야 할 것 같다. 그렇지 않으면 dll 자체를 이용 할 수 없을 지도 모른다.

* 약간의 희망은 여러가지 win32 dll을 로드해서 사용하는 예제들이 있기 때문에 살짝은 희망을 가져본다. 됐으면 좋겠다.
d21 1
a21 1
* dll 과의 parameter 전송을 위한 표준을 마련한다. 
d25 1
a25 1
* 구조체는 여러가지 자료형이 하나의 자료형처럼 사용되는 경우이다. 
d29 4
a32 8
* 실제 값을 가지고 있는 메모리를 가리키는 용도로 사용되는 변수이다. 
* php에서 C에서 사용하는 포인터는 어떻게 표현할까? 
* 포인터는 기본적으로 System에서 제공하는 메모리 주소공간을 가리킬 수 있는 크기이다. 보통은 unsigned int(4바이트) 정도의 크기를 가진다. 하지만 System 마다 다르다. 
* 윈도우 OS 에서는 포인터 크기는 4바이트이다.

== about return value ==

= Sample = 
d36 37
a72 24
* 객체 생성, 관련 dll 자동으로 로드  
<php> $lib = new WBLibrary('user'); </php>

* DLL 로드하기 (같은 이름의 dll을 두번 로드 하지 않습니다.)
<php>$lib->load();</php>

* 로드된 DLL 릴리즈 하기 (꼭 실행해야 하는 함수는 아님)
<php>$lib->release()</php>

* 함수 포인터 얻어오기 
<php>$address = $lib->getFunction('SetCapture');</php>

* 값 포인터 얻어오기 
* 변수 형태로 지정해서 가지고 온다. 
* 내부에서 $var 를 &$value 형태로 고정시켜서 실제 $var의 주소와 $value 의 값이 동일한 곳을 가리키도록 한다. 
<php>$address = $lib->getAddress($var);</php>

* 함수 포인터로 DLL 함수 호출 (매개변수 지정 가능, 참조 매개변수에 값 설정 가능) 
* WBLibrary 상속한 클래스의 메소드를 호출 할 수 있게 해야함 , 구현예정 
<php>WBStruct::run('user', 'SetCapture', array($hwnd));</php>

* 메모리 영역에 값 설정 
<php>
WBLibrary::set($ptr, '값');
d74 7
a80 5
WBLibrary::set($ptr, '값', $bytes);
</php>

* 메모리 영역의 값 얻어오기
<php>
d91 2
a92 1
</php>
@
