デバイスが電気的に着脱可能な本体と、前記本体に設けられて前記デバイスを制御するコンピューターと、前記コンピューターによって実行されるプログラムを記憶しているプログラム記憶部とを備えており、前記プログラム記憶部は、前記本体に電気的に着脱可能な前記デバイスの種類別に設けられたダイナミックリンクライブラリーであるデバイス別DLLと、前記デバイス別DLLがダイナミックリンクされる実行ファイルとを前記プログラムとして備えており、前記プログラム記憶部は、前記デバイス別DLLが書き換え可能であることを特徴とする画像形成装置。前記プログラム記憶部は、前記本体に対して電気的に着脱可能であって前記デバイス別DLLを記憶している記憶媒体を備えていることを特徴とする請求項1に記載の画像形成装置。前記記憶媒体は、前記デバイスと一体であり、前記デバイスが前記本体に電気的に接続されることによって前記本体に電気的に接続されることを特徴とする請求項2に記載の画像形成装置。しかしながら、従来のプリンター専用機は、たとえ複合機と同一の型式の印刷デバイスを備えている場合であっても、プリンター専用機自身を制御する実行ファイルが複合機を制御する実行ファイルとは異なるので、読取デバイスやFAXデバイスなどの新たなデバイスが単に電気的に接続されただけでは、新たに接続されたデバイスを制御するプログラムが存在しないので、複合機として動作することができない。そのため、従来の画像形成装置は、デバイスの着脱によって機能がカスタマイズされる場合、画像形成装置自身を制御する実行ファイルが型式毎に製造されなければならない。そこで、本発明は、デバイスの着脱によって従来より容易に機能がカスタマイズされることができる画像形成装置を提供することを目的とする。本発明の画像形成装置は、デバイスが電気的に着脱可能な本体と、前記本体に設けられて前記デバイスを制御するコンピューターと、前記コンピューターによって実行されるプログラムを記憶しているプログラム記憶部とを備えており、前記プログラム記憶部は、前記本体に電気的に着脱可能な前記デバイスの種類別に設けられたダイナミックリンクライブラリーであるデバイス別DLLと、前記デバイス別DLLがダイナミックリンクされる実行ファイルとを前記プログラムとして備えており、前記プログラム記憶部は、前記デバイス別DLLが書き換え可能であることを特徴とする。この構成により、本発明の画像形成装置は、デバイスが本体に対して着脱される場合、デバイス別DLLが書き換えられれば良く、実行ファイルが再ビルドされる必要がない。したがって、本発明の画像形成装置は、デバイスの着脱によって従来より容易に機能がカスタマイズされることができる。また、本発明の画像形成装置の前記プログラム記憶部は、前記本体に対して電気的に着脱可能であって前記デバイス別DLLを記憶している記憶媒体を備えていても良い。この構成により、本発明の画像形成装置は、デバイス別DLLを記憶している記憶媒体が本体に電気的に接続されるだけでデバイス別DLLが書き換えられるので、容易に機能がカスタマイズされることができる。また、本発明の画像形成装置の前記記憶媒体は、前記デバイスと一体であり、前記デバイスが前記本体に電気的に接続されることによって前記本体に電気的に接続されても良い。この構成により、本発明の画像形成装置は、デバイスが本体に電気的に接続されるだけでデバイス別DLLが書き換えられるので、容易に機能がカスタマイズされることができる。本発明の画像形成装置は、デバイスの着脱によって従来より容易に機能がカスタマイズされることができる。以下、本発明の実施の形態について、図面を用いて説明する。第1の実施の形態図1は、本実施の形態に係る画像形成装置10の正面図である。図1に示すように、画像形成装置10は、本体20と、本体20に電気的に接続されたスキャナー47aと、本体20およびスキャナー47aを支持する台50とを備えている。図2は、画像形成装置10の構成を示すブロック図である。図2に示すように、画像形成装置10は、画像形成装置10全体を制御するコンピューターであるコントローラー30と、コントローラー30に接続されていて種々の情報を表示する表示部41と、コントローラー30に接続されていて利用者によって種々の操作が入力される操作部42と、コントローラー30に接続されていてPCPersonalComputerなどの図示していない外部の装置と直接またはネットワーク経由で通信を行うための通信インターフェイス43と、コントローラー30に接続されているEEPROMElectricallyErasableProgrammableReadOnlyMemoryなどの不揮発性記憶装置44と、本体20に対して電気的に着脱可能であって種々の情報を記憶している記憶媒体であるUSBUniversalSerialBusメモリー45aと、コントローラー30に接続されていてUSBメモリー45aが電気的に接続されるUSBコネクター45bと、コントローラー30に接続されていて用紙に印刷を実行する印刷デバイスであるプリンター46と、用紙から画像を読み取る読取デバイスであるスキャナー47aと、コントローラー30に接続されていてスキャナー47aが電気的に接続されるスキャナー用コネクター47bと、FAXの送受信を行うFAXデバイスであるFAX通信装置48aと、コントローラー30に接続されていてFAX通信装置48aが電気的に接続されるFAX通信装置用コネクター48bとを備えている。なお、コントローラー30、表示部41、操作部42、通信インターフェイス43、不揮発性記憶装置44、USBコネクター45b、プリンター46、スキャナー用コネクター47bおよびFAX通信装置用コネクター48bは、本体20に備えられている。コントローラー30は、プリンター46、スキャナー47aおよびFAX通信装置48aを制御するCPUCentralProcessingUnit31と、プログラムおよび各種のデータを予め記憶しているROMReadOnlyMemory32と、CPU31の作業領域として用いられる書き換え可能な揮発性の記憶装置であるRAMRandomAccessMemory33とを備えている。CPU31は、ROM32に記憶されているプログラムを実行することによってコントローラー30を動作させる演算処理装置である。RAM33は、CPU31によってプログラムが実行されるときにプログラムや各種のデータを一時的に記憶するようになっている。ROM32は、実行ファイル11を記憶している。表示部41は、例えばLCDLiquidCrystalDisplayなどの表示デバイスである。操作部42は、表示部41とともにタッチパネルを形成するボタンなどの入力デバイスである。通信インターフェイス43は、例えば、プリンター46で印刷されるための印刷データを外部の装置から受信したり、スキャナー47aによって生成された画像データを外部の装置に送信したりする。不揮発性記憶装置44は、プリンター46を制御するためのダイナミックリンクライブラリーであるプリンター用DLL12と、スキャナー47aを制御するためのダイナミックリンクライブラリーであるスキャナー用DLL13と、FAX通信装置48aを制御するためのダイナミックリンクライブラリーであるFAX通信装置用DLL14とを記憶している。スキャナー用DLL13およびFAX通信装置用DLL14は、本体20に電気的に着脱可能なデバイスの種類別に設けられており、本発明のデバイス別DLLを構成している。ここで、不揮発性記憶装置44は、スキャナー用DLL13およびFAX通信装置用DLL14が書き換え可能である。なお、ROM32に記憶されている実行ファイル11は、不揮発性記憶装置44に記憶されているプリンター用DLL12、スキャナー用DLL13およびFAX通信装置用DLL14がダイナミックリンクされるようにパスが設定されている。つまり、実行ファイル11、プリンター用DLL12、スキャナー用DLL13およびFAX通信装置用DLL14は、コントローラー30によって実行されるプログラムである。したがって、ROM32および不揮発性記憶装置44は、本発明のプログラム記憶部を構成している。USBメモリー45aは、スキャナー用DLL13およびFAX通信装置用DLL14の少なくとも一方を記憶している。プリンター46は、通信インターフェイス43を介して外部の装置から受信された印刷データ、スキャナー47aによって生成された画像データ、FAX通信装置48aを介して外部のファクシミリ装置からFAX受信されたFAXデータなどのデータに基づいて、用紙に印刷を実行する。スキャナー47aは、通信インターフェイス43を介して外部の装置に送信されるための画像データ、プリンター46によって印刷されるための画像データ、FAX通信装置48aを介して外部のファクシミリ装置にFAX送信されるための画像データなどの画像データを生成する。スキャナー47aは、スキャナー用コネクター47bを介して本体20に電気的に着脱可能なデバイスである。FAX通信装置48aは、外部のファクシミリ装置からFAXデータをFAX受信したり、外部のファクシミリ装置にFAXデータをFAX送信したりする。FAX通信装置48aは、FAX通信装置用コネクター48bを介して本体20に電気的に着脱可能なデバイスである。以下においては、実行ファイル11、プリンター用DLL12、スキャナー用DLL13およびFAX通信装置用DLL14が実行されるOSOperatingSystemがLinux登録商標であり、実行ファイル11、プリンター用DLL12、スキャナー用DLL13およびFAX通信装置用DLL14のプログラミング言語がCであるとして説明する。しかしながら、OSやプログラミング言語としては、任意のものが採用可能である。<画像形成装置10がスキャナー47aおよびFAX通信装置48aを備えていない場合>図3は、スキャナー47aを備えていない場合の画像形成装置10の正面図である。図4は、スキャナー47aおよびFAX通信装置48aを備えていない場合の画像形成装置10の構成を示すブロック図である。画像形成装置10は、スキャナー47aおよびFAX通信装置48aを備えていない場合、すなわち、プリンター専用機としてカスタマイズされる場合、図3および図4に示す状態である。画像形成装置10は、図3に示す状態である場合、外部の装置から通信インターフェイス43を介して受信した印刷データに基づいた画像をプリンター46によって用紙に印刷する印刷機能を備えている。図5は、図4に示す画像形成装置10のプログラムのクラス図である。図5に示すように、画像形成装置10のプログラムは、処理の実行を要求するclientクラス61と、画像形成装置10の各デバイスの処理を実行するクラスをclientクラス61からの要求を受けて生成するfactoryクラス62と、画像形成装置10の各デバイスの処理を実行するクラスの抽象クラスであるdeviceクラス63と、画像形成装置10のデバイスに依存しない共通の処理および画像形成装置10のデバイスのうちプリンター46に特化した処理を担当するprinterクラス64と、画像形成装置10のデバイスのうちスキャナー47aが装着されていない場合に使用されるscannerdummyクラス65aと、画像形成装置10のデバイスのうちFAX通信装置48aが装着されていない場合に使用されるfaxdummyクラス66aとによって構成されている。ここで、clientクラス61、factoryクラス62、deviceクラス63、printerクラス64、scannerdummyクラス65a、faxdummyクラス66aのソースファイルをそれぞれclientcpp、factorycpp、devicecpp、printercpp、scannerdummycpp、faxdummycppとする。また、clientクラス61の処理を開始するメソッドをコールするためにmaincppが用意される。図6は、図4に示す実行ファイル11、プリンター用DLL12、スキャナー用DLL13およびFAX通信装置用DLL14の作成手順を示す図である。図6に示すように、maincpp、clientcpp、factorycpp、devicecppがそれぞれコンパイルされることによって、maino、cliento、factoryo、deviceoが作成される。また、printercpp、scannerdummycpp、faxdummycppがそれぞれコンパイルされることによって、libprnso、libscnso、libfaxsoという名称でライブラリーが作成される。そして、maino、cliento、factoryo、deviceoがリンクされるとともに、libprnso、libscnso、libfaxsoがダイナミックリンクされることによって、testexeが作成される。このようにして作成されたtestexe、libprnso、libscnso、libfaxsoがそれぞれ実行ファイル11、プリンター用DLL12、スキャナー用DLL13、FAX通信装置用DLL14である。<画像形成装置10がスキャナー47aを備えていてFAX通信装置48aを備えていない場合>図7は、スキャナー47aを備えていてFAX通信装置48aを備えていない場合の画像形成装置10の構成を示すブロック図である。画像形成装置10は、スキャナー47aを備えていてFAX通信装置48aを備えていない場合、図1および図7に示す状態である。画像形成装置10は、図7に示す状態である場合、上述した印刷機能だけでなく、例えば、スキャナー47aによって原稿から画像を読み取って画像データを生成するスキャナー機能や、スキャナー47aによって原稿から読み取った画像をプリンター46によって用紙に印刷する複写機能を備えている。図8は、図7に示す画像形成装置10のプログラムのクラス図である。図8に示すように、画像形成装置10のプログラムは、図5に示す構成と異なり、画像形成装置10のデバイスのうちスキャナー47aに特化した処理を担当するscannerクラス65bを、scannerdummyクラス65aに代えて備えている。ここで、scannerクラス65bのソースファイルをscannercppとする。そして、scannercppがコンパイルされることによって、上述したscannerdummycppがコンパイルされたときと同一の名称であるlibscnsoというライブラリーが作成される。このようにして作成されたlibscnsoがスキャナー用DLL13である。なお、scannercppから作成されたスキャナー用DLL13は、このスキャナー用DLL13が記憶されているUSBメモリー45aがUSBコネクター45bに電気的に接続されることによって、コントローラー30によって不揮発性記憶装置44上のスキャナー用DLL13に上書きされる。したがって、利用者は、画像形成装置10が図4に示す状態である場合、スキャナー47aを本体20のスキャナー用コネクター47bに電気的に接続するとともに、scannercppから作成されたスキャナー用DLL13が記憶されたUSBメモリー45aをUSBコネクター45bに電気的に接続することによって、画像形成装置10を図7に示す状態にカスタマイズすることができる。<画像形成装置10がFAX通信装置48aを備えていてスキャナー47aを備えていない場合>図9は、FAX通信装置48aを備えていてスキャナー47aを備えていない場合の画像形成装置10の構成を示すブロック図である。画像形成装置10は、FAX通信装置48aを備えていてスキャナー47aを備えていない場合、図3および図9に示す状態である。画像形成装置10は、図9に示す状態である場合、上述した印刷機能だけでなく、例えば、外部のファクシミリ装置からFAX通信装置48aによってFAX受信したFAXデータに基づいた画像をプリンター46によって用紙に印刷するFAX受信機能、外部のファクシミリ装置からFAXデータをFAX通信装置48aによってFAX受信して通信インターフェイス43を介して外部の装置に送信するネットワークFAX受信機能、外部の装置から通信インターフェイス43を介して受信したFAXデータを外部のファクシミリ装置にFAX通信装置48aによってFAX送信するネットワークFAX送信機能を備えている。図10は、図9に示す画像形成装置10のプログラムのクラス図である。図10に示すように、画像形成装置10のプログラムは、図5に示す構成と異なり、画像形成装置10のデバイスのうちFAX通信装置48aに特化した処理を担当するfaxクラス66bを、faxdummyクラス66aに代えて備えている。ここで、faxクラス66bのソースファイルをfaxcppとする。そして、faxcppがコンパイルされることによって、上述したfaxdummycppがコンパイルされたときと同一の名称であるlibfaxsoというライブラリーが作成される。このようにして作成されたlibfaxsoがFAX通信装置用DLL14である。なお、faxcppから作成されたFAX通信装置用DLL14は、このFAX通信装置用DLL14が記憶されているUSBメモリー45aがUSBコネクター45bに電気的に接続されることによって、コントローラー30によって不揮発性記憶装置44上のFAX通信装置用DLL14に上書きされる。したがって、利用者は、画像形成装置10が図4に示す状態である場合、FAX通信装置48aを本体20のFAX通信装置用コネクター48bに電気的に接続するとともに、faxcppから作成されたFAX通信装置用DLL14が記憶されたUSBメモリー45aをUSBコネクター45bに電気的に接続することによって、画像形成装置10を図9に示す状態にカスタマイズすることができる。<画像形成装置10がスキャナー47aおよびFAX通信装置48aを備えている場合>画像形成装置10は、スキャナー47aおよびFAX通信装置48aを備えている場合、図1および図2に示す状態である。画像形成装置10は、図2に示す状態である場合、上述した印刷機能、スキャナー機能、複写機能、FAX受信機能、ネットワークFAX受信機能、ネットワークFAX送信機能だけでなく、例えば、スキャナー47aによって原稿から読み取った画像に基づいて生成したFAXデータを外部のファクシミリ装置にFAX通信装置48aによってFAX送信するFAX送信機能を備えている。図11は、図2に示す画像形成装置10のプログラムのクラス図である。図11に示すように、画像形成装置10のプログラムは、図5に示す構成と異なり、画像形成装置10のデバイスのうちスキャナー47aに特化した処理を担当するscannerクラス65b、画像形成装置10のデバイスのうちFAX通信装置48aに特化した処理を担当するfaxクラス66bを、それぞれscannerdummyクラス65a、faxdummyクラス66aに代えて備えている。ここで、scannerクラス65b、faxクラス66bのソースファイルをそれぞれscannercpp、faxcppとする。そして、scannercppがコンパイルされることによって、上述したscannerdummycppがコンパイルされたときと同一の名称であるlibscnsoというライブラリーが作成される。このようにして作成されたlibscnsoがスキャナー用DLL13である。また、faxcppがコンパイルされることによって、上述したfaxdummycppがコンパイルされたときと同一の名称であるlibfaxsoというライブラリーが作成される。このようにして作成されたlibfaxsoがFAX通信装置用DLL14である。なお、scannercppから作成されたスキャナー用DLL13は、このスキャナー用DLL13が記憶されているUSBメモリー45aがUSBコネクター45bに電気的に接続されることによって、コントローラー30によって不揮発性記憶装置44上のスキャナー用DLL13に上書きされる。同様に、faxcppから作成されたFAX通信装置用DLL14は、このFAX通信装置用DLL14が記憶されているUSBメモリー45aがUSBコネクター45bに電気的に接続されることによって、コントローラー30によって不揮発性記憶装置44上のFAX通信装置用DLL14に上書きされる。したがって、利用者は、画像形成装置10が図4に示す状態である場合、スキャナー47a、FAX通信装置48aをそれぞれ本体20のスキャナー用コネクター47b、FAX通信装置用コネクター48bに電気的に接続するとともに、scannercppから作成されたスキャナー用DLL13と、faxcppから作成されたFAX通信装置用DLL14とが記憶されたUSBメモリー45aをUSBコネクター45bに電気的に接続することによって、画像形成装置10を図2に示す状態にカスタマイズすることができる。なお、以上においては、図4に示す状態から図2、図7または図9に示す状態への変更について説明しているが、図7または図9に示す状態から図2に示す状態への変更など、図4に示す状態から図2、図7または図9に示す状態への変更以外の変更についても同様である。また、スキャナー47aやFAX通信装置48aを電気的に接続する変更だけでなく、電気的な接続を解除する変更についても同様である。どのような変更であっても、不揮発性記憶装置44上のスキャナー用DLL13、FAX通信装置用DLL14が変更後のスキャナー47aおよびFAX通信装置48aの状態に応じたものになっていれば良い。以上に説明したように、画像形成装置10は、スキャナー47a、FAX通信装置48aが本体20に対して着脱される場合、不揮発性記憶装置44上のスキャナー用DLL13、FAX通信装置用DLL14が書き換えられれば良く、実行ファイル11が再ビルドされる必要がない。したがって、画像形成装置10は、スキャナー47a、FAX通信装置48aの着脱によって従来より容易に機能がカスタマイズされることができる。また、画像形成装置10は、スキャナー用DLL13、FAX通信装置用DLL14を記憶しているUSBメモリー45aがUSBコネクター45bに電気的に接続されるだけでスキャナー用DLL13、FAX通信装置用DLL14が書き換えられるので、容易に機能がカスタマイズされることができる。なお、ROM32に記憶されている実行ファイル11は、本実施の形態において、不揮発性記憶装置44に記憶されているスキャナー用DLL13およびFAX通信装置用DLL14がダイナミックリンクされるようにパスが設定されているが、USBコネクター45bに電気的に接続されているUSBメモリー45aに記憶されているスキャナー用DLL13およびFAX通信装置用DLL14がダイナミックリンクされるようにパスが設定されていても良い。そのように構成されている場合、不揮発性記憶装置44にスキャナー用DLL13およびFAX通信装置用DLL14が記憶される必要がない。また、変更後のスキャナー用DLL13およびFAX通信装置用DLL14は、本実施の形態において、USBメモリー45aを介して本体20に導入されるようになっているが、USBメモリー45a以外の記憶媒体を介して本体20に導入されるようになっていても良い。第2の実施の形態図12は、本実施の形態に係る画像形成装置110の構成を示すブロック図である。なお、画像形成装置110の構成のうち、第1の実施の形態に係る画像形成装置10図1および図2参照。の構成と同様な構成については画像形成装置10の構成と同一の符号を付して説明を省略する。図12に示すように、画像形成装置110の構成は、画像形成装置10図2参照。がUSBメモリー45aおよびUSBコネクター45bを備えておらず、スキャナー47a、スキャナー用コネクター47b、FAX通信装置48a、FAX通信装置用コネクター48bに代えてスキャナー147a、スキャナー用コネクター147b、FAX通信装置148a、FAX通信装置用コネクター148bを備えている構成と同様である。スキャナー147aは、スキャナー用DLL13を記憶している記憶媒体として不揮発性記憶装置147cを備えている。つまり、不揮発性記憶装置147cは、スキャナー147aと一体である。スキャナー用コネクター147bは、スキャナー147aが電気的に接続されることによって不揮発性記憶装置147cが電気的に接続される。FAX通信装置148aは、FAX通信装置用DLL14を記憶している記憶媒体として不揮発性記憶装置148cを備えている。つまり、不揮発性記憶装置148cは、FAX通信装置148aと一体である。FAX通信装置用コネクター148bは、FAX通信装置148aが電気的に接続されることによって不揮発性記憶装置148cが電気的に接続される。以上の構成により、画像形成装置110は、スキャナー147a、FAX通信装置148aが本体20に電気的に接続されるだけでスキャナー用DLL13、FAX通信装置用DLL14が書き換えられるので、容易に機能がカスタマイズされることができる。なお、上述した各実施の形態において、本体20に電気的に着脱可能なデバイスとしてスキャナーおよびFAX通信装置について説明したが、これらのデバイス以外のデバイスであっても良い。