さて、CEPCを組み込み向けコントローラとして利用する場合、 設定したりログを得たりするために通信機能が必要となります。 その通信プロトコルとして何を利用するか… SMB(ファイル共有)はWinCE側はサーバにはなれませんし、 ftpはCE4ではサーバ機能ありますが、 そもそもファイルベースのプロトコルはださい。 TCP/IPのソケットベースの独自プロトコルは、 CE側はともかく親機側のプログラミングでもある程度の技量が必要。 でSOAP。CE4でのサーバサポートもあるしVB.NETでもVB6+SOAP SDKでも親機側も簡単。 まあ言うことなさそうですが基本的にセッション状態を保持しない (いくらでも方法ありますが) のと、 あとどーしてもプロトコルオーバヘッドがあって遅い。 CEOSイメージも大きくなる。

というわけでDCOMを使いましょう。 軽量のプロトコルだしセッション状態も維持できるし。 でもDCOMってどーもとっつきにくい(実際深いところまでやるとそーなんですが) と思われているので、まずはDCOMの簡単な実験をしてみましょう。

VBで簡単に実験君

まず2台のWin2000かWinXPマシンを用意して、両方にVB6 Pro版をインストールします。 Enterprise版だと楽できますが、Pro版で十分です。 なお、最終的にCEPCをDCOMサーバにしますので、 クライアント機はPlatformBuilderを動作させるマシンと兼ねることもできますし、 CEPCはフロッピからデバッグ起動するのでサーバ機も CEPCと兼ねさせることができます。
サーバ機のAdministratorのパスワードとクライアント機のAdministratorのパスワードを同じにして、両方ともAdministratorでログインします。
サーバ機でVB6を起動し、ActiveX DLLで新規プロジェクトを作成します。 Project1のプロパティ…を開いて、全般タブのプロジェクト名をHello1とかにします。 Enterprise版ならコンポーネントタブの「リモートサーバファイル」をチェックします。
Class1.clsを開いて、
Function Sum(Byval x as Long, Byval y as Long) As Long
  Sum= x+y
End Function
とか入力します。
まずここでプロジェクトを保存します。次に、Hello1.dllの作成を行います。 これでHello1.Class1というクラス名、Sumというメソッドを持つオブジェクトサーバが作成されます。
サーバマシンでVBからデバッグ実行します。 デバッグオプションはコンポーネントが作成されるまで待機する、です。

さて、サーバ機でregeditを開き、HKEY_CLASSES_ROOT\Hello1.Class1のCLSIDの値を見てください。{7A26DA41-AA01-4503-A3E0-6316BA116EE1}とか登録されていると思います。 これとまったく同じ内容をクライアント機に設定します。設定するのはこのCLSIDキーだけで、HKCR\CLSIDの同名キーの内容などは不要です。
Enterprise版の場合、Hello1.VBRというファイルが作成されていると思います。 これをクライアント機にコピーし、クライアント機のコマンドラインから clireg32 hello1.vbrで登録することにより、 上記のCLSIDの設定等を自動的に行ってくれます。clireg32は c:Program Files\MS VS\Common\Toolsとかにあるので検索して場所を調べてください。
Hello1.VBRは次のような内容で、青字が該当部分です。

VB5SERVERINFO
VERSION=1.0.0
HKEY_CLASSES_ROOT\Typelib\{BDBED751-B3E0-404D-9AEE-FC5E154A7211}\2.0\0\win32 = Hello1.dll
HKEY_CLASSES_ROOT\Typelib\{BDBED751-B3E0-404D-9AEE-FC5E154A7211}\2.0\FLAGS = 0
HKEY_CLASSES_ROOT\Hello1.Class1\CLSID = {7A26DA41-AA01-4503-A3E0-6316BA116EE1}
HKEY_CLASSES_ROOT\CLSID\{7A26DA41-AA01-4503-A3E0-6316BA116EE1}\ProgID = Hello1.Class1
HKEY_CLASSES_ROOT\CLSID\{7A26DA41-AA01-4503-A3E0-6316BA116EE1}\Version = 2.0
HKEY_CLASSES_ROOT\CLSID\{7A26DA41-AA01-4503-A3E0-6316BA116EE1}\Typelib = {BDBED751-B3E0-404D-9AEE-FC5E154A7211}
HKEY_CLASSES_ROOT\CLSID\{7A26DA41-AA01-4503-A3E0-6316BA116EE1}\LocalServer32 = Hello1.dll
HKEY_CLASSES_ROOT\INTERFACE\{25086FD9-F23C-4346-96DB-570AD10F634D} = Class1
HKEY_CLASSES_ROOT\INTERFACE\{25086FD9-F23C-4346-96DB-570AD10F634D}\ProxyStubClsid = {00020420-0000-0000-C000-000000000046}
HKEY_CLASSES_ROOT\INTERFACE\{25086FD9-F23C-4346-96DB-570AD10F634D}\ProxyStubClsid32 = {00020420-0000-0000-C000-000000000046}
HKEY_CLASSES_ROOT\INTERFACE\{25086FD9-F23C-4346-96DB-570AD10F634D}\Typelib = {BDBED751-B3E0-404D-9AEE-FC5E154A7211}
HKEY_CLASSES_ROOT\INTERFACE\{25086FD9-F23C-4346-96DB-570AD10F634D}\Typelib\"version" = 2.0
クライアント機でVB6を起動して標準EXEでプロジェクトを作り、 フォームにボタンを1つはりつけて、 そのclickイベントに次のように記述します。
Private Sub Command1_Click()
  Dim a As Object
  Set a = CreateObject("Hello1.Class1", "servername")
  MsgBox a.Sum(10, 10)
End Sub
servernameにはサーバ機の名前かIPアドレスを記述します。 んだば実行してボタンを押してみましょう。簡単でしょ?

CLSIDとCreateObject

CreateObject関数はCLSIDを引数として取れない(ProgIDのみ)ので、 このようなレジストリ登録が必要となります。 VBではユーザからCLSIDを意識させないようで、 メソッドのちょっとした変更であっさりCLSIDが変わるので、このようになってます。 CLSID等をあまり変えたくない時はサーバプロジェクトのコンパチビリティを バイナリ互換にしておいてください。 なお、VCからだとこのような事前登録は必要なく、 CLSIDとサーバ名がわかればCoCreateInstanceExでオブジェクトを利用できます。 (VBでもCLSIDモニカを使ってローカルなインスタンスならCLSIDで作成できますが、 リモートはうまい手段があるのかな?)

なお、サーバ側がEnterprise版の場合、 作成された.VBRと.TLB(タイプライブラリ)をクライアントに持ってきて、 clireg32でサーバ名も指定して登録すると、 上記CreateObjectでサーバ名を指定せずにオブジェクトを作成したり、 VBの参照設定でHello1.Class1を参照しておいて 普通のVB変数のように(アーリーバインディングで)扱ったりして、 あたかも遠隔であることをまったく感じさせずに プログラミングさせることも可能です。

dllhost.exe

上記の例ではサーバ機ではVBをデバッグ実行しておかなければなりませんでした。 VBなしで起動するには代理親を指定する必要があります。 (この作業はVBでHello1.dllを再作成する度に必要です。)
サーバ機でレジストリエディタを起動し、HKCR\Hello1.Class1\CLSIDでCLSIDを得て、 HKCR\CLSID\{CLSID}\AppID値を見てAPPIDを得て(CLSIDと同じかもしれません)、 HKCR\AppID\{AppID} に、DllSurrogateという文字列項目を追加し、値は""(空文字列)にします。
VC6のツールのOLE Viewがある場合はもっと簡単に行えます。 OLE ViewのAutomation ObjectのHello1.Class1で、ImplemetaionのタブでUse Surrogate Processにチェックして、 別のタブに切り替える(バグ対処)だけです。 サーバでVB6を起動せずにクライアントのボタンを押してみましょう。動きましたね? この時サーバ側のプロセス一覧にはdllhost.exeが起動されていると思います。 これが代理親です。

→CEでDCOM