COM/DCOM$B$N%^!<%7%c%j%s%0$kh<$&

$B:n@.(B:2005$BG/(B12$B7n(B6$BF|(B

$B2~D{(B:2006$BG/(B5$B7n(B17$BF|(B

$B5HED@?0l$N%[!<%`%z!<%8(b > $B%=%U%H%&%'%"9)3X(B > $B5;=Q%3%i%`(B > $B%W%m%0%i%_%s%0(B

COM/DCOM$B$OK\Mh$O%P%$%J%j5,3J$G$9$,!"%$%s%?!<%u%'!<%9$n;emm$o!"(bidl (Interface Definition Language) $B$r;H$C$F?M4V$,FI$a$k7A$GDj5A$9$k$N$,0lHLE*$G$9!#(B

IDL$B$N%$%s%?!<%u%'!<%9dj5a$g;h$($k%g!<%?7?$o!"(bc$b8@8l(b/c++$b8@8l$n%g!<%?7?$h$h$f$bni$/;w$f$$$^$9!#l9g$O!"(BCOM/DCOM$B$N4X?t8F$S=P$7$O!"$U$D$&$N4X?t8F$S=P$7$H$N0c$$$O!"$[$H$s$I0U<1$9$k$3$h$,$"$j$^$;$s!#(b

$B$7$+$7!"(BCOM/DCOM$B$N%G!<%?7?$h!"(bc$b8@8l(b/c++$b8@8l$n%g!<%?7?$h$o!"87l)$k$o0[$j$c$f$$$^$9!#cm0u$7$j$$$h!"%3%s%q%$%k$k$o@.8y$7$f$b!"

$B$3$3$G$O!"%G!<%?7?$n%^!<%7%c%j%s%0$kh<$&!"(bcom/dcom$b$nR2p$7$^$9!#(B

$BL\
  1. $BNs5s7?$N
  2. $B=PNOMQ0z?t$NCM$N=q$-49$($KH<$&ldbj(b
  3. $B9=B$BN$N%5%$%:$KH<$&ldbj(b
  4. $B9=B$BN$N%"%i%$%a%s%H$KH<$&ldbj(b
    1. $B%"%i%$%a%s%H$N;XDj(B
    2. COM/DCOM$B$K$*$1$k%"%i%$%a%s%H$N0UL#(B

$BNs5s7?$N

COM/DCOM$B$G$b!"Ns5s7?(B(enum$B7?(B)$B$r;H$&$3$H$,$G$-$^$9!#$7$+$7!"(BCOM/DCOM$B$N4X?t8F$S=P$7$GNs5s7?$N%G!<%?$r

0x800706f5 $BLd$$9g$o$;$NCM$OHO0O30$G$9!#(B
The enumeration value is out of range.

$B$3$N%(%i!<%3!<%i$o!"2<5-$ncm$n9g@.$h$j$c$f$$$^$9!#(b

$BFbMF(B $B7k2L(B $BCM(B
$B%(%i!<%s%c%h(b $B%(%i!<(b 1
$B%U%!%7%j%F%#(B Win32 7
Win32$B%(%i!<%3!<%i(b RPC_X_ENUM_VALUE_OUT_OF_RANGE 0x000006F5

$B$3$l$O!"(BCOM/DCOM$B$H!"(BC$B8@8l(B/C++$B8@8l$H$G$O!"Ns5s7?$N

C$B8@8l(B/C++$B8@8l$G$O!"FC$K;XDj$r$7$J$1$l$P!"Ns5s7?$O(B4$B%P%$%H$N(Bsigned int$B7?$H$J$j$^$9!#(B

$B$7$+$7!"(BCOM/DCOM$B$G$O!"(B2$B%P%$%H$N(Bunsigned short$B7?$H$J$C$F$$$^$9!#$=$N$?$a!":GBg$G$b(B65535$B$^$G$7$+CM$rAw$G$O!":GBg$G(B32767$B$^$G$K$J$j$^$9!#(B

$B$3$N%(%i!<$kax6x$9$k$n$o!"nc$($p

$BIi$NCM$r;}$DNs5s7?$rDj5A$7$?>l9g(B

C$B8@8l(B/C++$B8@8l$NNs5s7?$O!"Ii$NCM$r;}$D$3$H$b$G$-$^$9!#(B

typedef enum {
 Bar = -1,
 Baz
} FooEnum;
 

$B$3$NNs5s7?$r(BCOM/DCOM$B$N%$%s%?!<%u%'!<%9$g$b;hmq$9$k$h!"

$B$3$N$h$&$JNs5s7?$r(BIDL$B$NDj5A$G;HMQ$7$F$b!"(BMIDL(Microsoft IDL$B%3%s%Q%$%i(B)$B$O%3%s%Q%$%k;~$K$O%(%i!<$r=pno$7$j$$$n$g!"cm0u$,i,mw$g$9!#(b

$B$^$?!"$3$NNs5s7?$r;H$&%$%s%?!<%u%'!<%9$g$b!"(b0$b0j>e$NCM$@$1$rl9g$O!"%(%i!<$h$o$j$j$^$;$s!#>e5-$NNc$G$O!"(BBaz$B$rEO$9>l9g$O@5>o$KF0:n$7$^$9$,!"(BBar$B$rEO$7$?;~E@$G=i$a$F%(%i!<$k$j$j$^$9!#(b

$B=i4|2=$7$J$+$C$?>l9g(B

$BCM$r

HRESULT IFoo::Get( [out] FooEnum* e );
 

$B$3$N>l9g$O!"

FooEnum e;
HRESULT hResult = pFoo->Get(&e);
 

$B$7$+$7!"CM$r

HRESULT IFoo::GetSet( [in,out] FooEnum* e, [in] bool bGet );
 

$B$3$N>l9g$O!"$?$H$(CM$rl9g$G$"$C$F$b!"

FooEnum e;
HRESULT hResult = pFoo->GetSet(&e, true); // Get
 

$B$3$l$O!"JQ?t(Be$B$,=i4|2=$5$l$F$$$J$$$?$a!"(B($B$?$$$F$$$O(B)0$B!A(B32767$B$NHO0O$rD6$($kCM$,Aw$i$l$F$7$^$&$?$a$G$9!#(B

$B$^$?!"Ns5s7?$NG[Ns$rl9g$K$b!"Cm0U$,I,MW$G$9!#(B

$BNc$($P!"(Bn$B8D$NNs5s7?$NCM$rJV$9!"

typedef struct {
 int n;
 FooEnum e[10];
} FooStruct;
HRESULT IFoo::Get( /*[out]*/ FooStruct* s ) {
 s->n = 5;
 for (int i = 0 ; i < s->n ; i++) {
 s->e[i] = Bar;
 }
 return S_OK;
}
 

$B$3$N>l9g!"9=B$BN(BFooStruct$B$N$&$A!"(Be[5]$B!A(Be[9]$B$K$O(B($B$?$$$F$$$O(B)0$B!A(B32767$B$NHO0O$rD6$($kCM$,F~$C$?$^$^$H$J$j!"%(%i!<$,h/@8$7$^$9!#(b

$B$$$:$l$N>l9g$b!"Ns5s7?$r@5$7$/=i4|2=$7$?>e$G8F$S=P$;$P!"%(%i!<$oh/@8$7$^$;$s!#(b

$B=PNOMQ0z?t$NCM$N=q$-49$($KH<$&ldbj(b

COM/DCOM$B$G$b!"(BC$B8@8l(B/C++$B8@8l$HF1$8$h$&$K!"0z?t$K%]%$%s%?$rEO$9$3$H$G!"4X?t$+$iCM$r

typedef struct {
 int x;
 int y;
} FooStruct;
HRESULT IFoo::Get( [out] FooStruct* data );
 

$B$7$+$7!"(BCOM/DCOM$B$G$O!"CM$r

$BM=$a%G%U%)%k%HCM$r%;%C%H$7$F$*$1$J$$(B

$B4X?t$r8F$S=P$9A0$K!"JQ?t$K%G%U%)%k%HCM$r%;%C%H$7$F$*$/%1!<%9$,$"$j$^$9!#(b

$BNc$($P!"l9g$N$_!"CM$,%;%C%H$5$l$^$9!#$=$&$G$J$1$l$P!"4X?t$r8F$S=P$9A0$K%;%C%H$7$F$*$$$?%G%U%)%k%H$NCM$,I=<($5$l$^$9!#(b

void Foo::Get ( FooStruct* data ) {
 :
 if (this->m_bFlag) {
 data->x = this->m_x;
 data->y = this->m_y;
 }
 :
}
int main ( int argc, char** argv ) {
 Foo foo;
 :
 FooStruct data;
 data.x = 1; // $B%G%U%)%k%H(B
 data.y = 1; // $B%G%U%)%k%H(B
 foo.Get(&data);
 printf("%d %d\n", data.x, data.y);
 :
}
 

$B$7$+$7!"$3$N%3!<%i$r$=$n$^$^(bcom/dcom$b$k0\?"$9$k$h!"@5$7$/f0:n$7$^$;$s!#(b

COM/DCOM$B$G$O!"(BGet$B4X?t$r8F$S=P$7$?;~E@$G!"JQ?t(Bdata$B$NCM$,(B0$B$K%/%j%"$5$l$^$9!#$=$N$?$a!"(Bm_bFlag$B$H$$$&%U%i%0JQ?t$,56$N>l9g$O!"M=$a%;%C%H$7$F$*$$$?%G%U%)%k%H$NCM$G$O$J$/!"(B0$B$,I=<($5$l$^$9!#(b

$B$?$H$(!"%j%b!<%h%*%v%8%'%/%h$k@\b3$g$-$:!"(bcom/dcom$b$n8f$s=p$7$k<:gt$7$?>l9g$G$"$C$F$b!"JQ?t$NCM$,(B0$B$K%/%j%"$5$l$k$N$G!"Cm0U$,I,MW$G$9!#(B

C$B8@8l(B/C++$B8@8l$H0[$J$j!"(BCOM/DCOM$B$G$O!"4X?t$,8F$S=P$;$J$$>l9g$r9M$($F$*$/I,MW$,$"$j$^$9!#$7$+$7!"4X?t$,8F$S=P$;$J$$>l9g$KHw$($F!"M=$aJQ?t$K%G%U%)%k%HCM$r%;%C%H$7$F$*$/$3$H$O$G$-$^$;$s!#I,$:!"

HRESULT h = foo.Get(&data);
if (h != S_OK) {
 data.x = 1; // $B%G%U%)%k%H(B
 data.y = 1; // $B%G%U%)%k%H(B
}
 
$B8F$S=P$9A0$KCM$,%/%j%"$5$l$k(B

$BJL$N%9%l%C%I$GJQ?t$NCM$r4F;k$7$F!"CM$,JQ$o$C$?$i2?$+=hM}$r9T$&!"$H$$$&%1!<%9$,$"$j$^$9!#$3$n;~!"4f;k$7$f$$$kjq?t$n%]%$%s%?$r0z?t$keo$7$f!"4x?t$ncf$gcm$r=q$-jq$($f$$$k>l9g$O!"Cm0U$,I,MW$G$9!#(B

C$B8@8l(B/C++$B8@8l$G$O!"4X?t$NCf$GCM$r=q$-49$($F$b!"@5$7$/F0:n$7$^$9!#(B

C$B8@8l(B/C++$B8@8l$N4X?t$GCM$r=q$-49$($k>l9g$N%7!<%1%s%9(b

$B$7$+$7!"CM$r=q$-49$($k4X?t$r(BCOM/DCOM$B$K0\?"$9$k$H!"@5$7$/F0:n$7$^$;$s!#(BCOM/DCOM$B$G$O!"4X?t$r8F$S=P$7$?;~E@$G!"$$$C$?$sCM$,(B0$B$K%/%j%"$5$l$^$9!#$D$^$j!"CM$,(B2$B2sJQ2=$7$?$3$H$K$J$C$F$7$^$&$N$G$9!#(B

COM/DCOM$B$N4X?t$GCM$r=q$-49$($k>l9g$N%7!<%1%s%9(b

COM/DCOM$B$K0\?"$9$k$H!"JQ?t$NCM$O!"4X?t8F$S=P$7$,40N;$9$k$^$G=q$-49$o$i$J$/$J$j$^$9!#$=$N$?$a!"%?%$%_%s%0$K4X$9$kLdBj$bH/@8$9$k$+$b$7$l$^$;$s!#(B

$B$J$*!"CM$rl9g$O!"$3$N$h$&$JCM$N=q$-49$($KH<$&ldbj$oh/@8$7$^$;$s!#(bint$b7?$g$"$l$p!"4x?t$r8f$s=p$7$f$b!"cm$,(b0$b$k%/%j%"$5$l$k$3$h$o$j$/!"(bc$b8@8l(b/c++$b8@8l$hf1$8$h$&$kf0:n$7$^$9!#(b

HRESULT IFoo::Get( [out] int* data );
 

$B$D$^$j!"(BCOM/DCOM$B$N>l9g$O!"(Bint$B7?$N$h$&$J4pK\%G!<%?7?$h!"9=b$bn$h$g$o!"%]%$%s%?$reo$7$?>l9g$NF0:n$,0[$J$C$F$$$^$9$N$G!"Cm0U$,I,MW$G$9!#(B

$B9=B$BN$N%5%$%:$KH<$&ldbj(b

COM/DCOM$B$N%$%s%?!<%u%'!<%9$g!"(b64kb$b$rd6$($k5pbg$j9=b$bn$r;h$*$&$h$9$k$h!"(bmidl(microsoft IDL$B%3%s%Q%$%i(B)$B$O!"%3%s%Q%$%k;~$K%(%i!<$r=pno$7$^$9!#(b

$B$7$+$7!"(B64KB$B$h$j>.$5$$9=B$BN$r;H$C$F!"%3%s%Q%$%k$,DL$C$?>l9g$G$b!"(BCOM/DCOM$B$N4X?t$r8F$S=P$7$F$_$k$H!"%(%i!<$,5/$-$k$3$h$,$"$j$^$9!#(b

$BNc$($P!"

typedef struct {
 int data[2000];
} FooStruct;
 

$B$=$7$F!"

HRESULT IFoo::Set( [in] FooStruct foo );
 

$B$3$N9=B$BN$N%5%$%:$O(B8KB$B$J$N$G!"$3$N4X?t$O%3%s%Q%$%k$K@.8y$7$^$9!#$H$3$m$,!"8F$S=P$7$F$_$k$H!"2<5-$n%(%i!<%3!<%i$,jv$5$l!"8f$s=p$7$k<:gt$7$^$9!#(b

0x8007000e $B$3$NA`:n$r40N;$9$k$N$K==J,$J5-21NN0h$,$"$j$^$;$s!#(B
Not enough storage is available to complete this operation.

$B$3$N(BHRESULT$B7?$NCM$KBP1~$9$k(BWin32$B$N%(%i!<%3!<%i$o!"

0x0000000e ERROR_OUTOFMEMORY

$B$3$N;~!"(BCOM/DCOM$B%5!<%p$g$o!"$+$j$j=ebg$jldbj$,h/@8$7$f$$$k$h$&$g$9!#0ley$3$n%(%i!<$,h/@8$7$?8e$g!"f1$84x?t$r$b$&0ley8f$s=p$7$f$_$k$h!"(b2$b2sl\$+$i$o!"2<5-$n%(%i!<%3!<%i$,jv$5$l$k$h$&$kjq2=$7$^$7$?!#(b

0x800703e6 $B%a%b%j$N>l=j$KL58z$J%"%/%;%9$,$"$j$^$7$?!#(B
Invalid access to memory location.
0x800706ba RPC$B%5!<%p!<$rmxmq$g$-$^$;$s!#(b
The RPC server is unavailable.

$B$3$l$i$N(BHRESULT$B7?$NCM$KBP1~$9$k(BWin32$B$N%(%i!<%3!<%i$o!"

0x000003e6 ERROR_NOACCESS
0x000006ba RPC_S_SERVER_UNAVAILABLE

$B$I$A$i$N%(%i!<%3!<%i$,jv$5$l$k$+$o!">u67$K$h$j$^$9!#(BCOM/DCOM$B%5!<%p$n:n$jj}$k$h$c$f$o!"%5!<%p$g%"%w%j%1!<%7%g%s%(%i!<$,h/@8$7$f$7$^$&$3$h$b$"$k$h$&$g$9!#(b

$B$3$N860x$O!"9=B$BN$N%5%$%:$,Bg$-$9$.$k$3$H$G$9!#(B64KB$B$h$j>.$5$1$l$P%3%s%Q%$%k$K$O@.8y$7$^$9$,!"I,$:$7$b

FooStruct$B9=B$BN$NDj5A$r.$5$/$9$k$H!"$3$N4X?t$r8F$S=P$7$F$b@.8y$9$k$h$&$K$J$j$^$9!#(B

typedef struct {
 int data[1000];
} FooStruct;
 

$B

$B$J$*!"4X?t$N0z?t$K9=B$BN$=$N$b$N$rEO$9$N$G$O$J$/!"9=B$BN$N%]%$%s%?$rEO$9$h$&$K$9$l$P!"(B8KB$B$rD6$($kBg$-$J9=B$BN$G$"$C$F$b!"%(%i!<$oh/@8$7$^$;$s!#>e5-$NNc$G8@$($P!"4X?t$r

HRESULT IFoo::Set( [in] FooStruct* foo );
 

COM/DCOM$B4X?t$G9=B$BN$r

$B9=B$BN$N%"%i%$%a%s%H$KH<$&ldbj(b

$B%"%i%$%a%s%H$N;XDj(B

COM/DCOM$B$r;H$&;~$O!"9=B$BN$N%"%i%$%a%s%H$K$bCm0U$7$J$/$F$O$J$j$^$;$s!#(B

$B9=B$BN$N%"%i%$%a%s%H$O!"(BVisual C++$B$N%G%U%)%k%H$G$O(B8$B%P%$%H6-3&$K$J$C$F$$$^$9!#$3$N@_Dj$rJQ99$7$F$b!"%3%s%Q%$%k$ODL$j$^$9!#$7$+$7!"(BCOM/DCOM$B$N4X?t$r8F$S=P$9$H!"%"%W%j%1!<%7%g%s%(%i!<$,h/@8$7$f$7$^$$$^$9!#(b

Visual C++$B$N@_Dj2hLL(B

$B$G$9$,!"(BCOM/DCOM$B$r;H$&;~$G$b!"9=B$BN$N%"%i%$%a%s%H$rJQ99$G$-$J$$Lu$G$O$"$j$^$;$s!#(B

COM/DCOM$B$N4X?t$G9=B$BN$r;H$&;~$O!"$?$$$F$$!"9=B$BN$rDj5A$7$?%X%C%@%U%!%$%k$r!"(BC++$B8@8l$N%=!<%9%u%!%$%k$h!"%$%s%?!<%u%'!<%9$rdj5a$7$?(bidl$b%u%!%$%k$h!"n>J}$G(B#include$B$9$k$3$H$K$J$k$G$7$g$&!#(B

$B%X%C%@%U%!%$%k$r%$%s%/%k!<%i$9$klo<0?^(b

$B$3$3$G!"9=B$BN$rDj5A$7$?%X%C%@%U%!%$%k$NCf$G!"(B#pragma$B$G;XDj$9$l$P!"(BCOM/DCOM$B$r;H$&;~$G$b!"9=B$BN$N%"%i%$%a%s%H$rJQ99$G$-$^$9!#(B

pragma$B$G%"%i%$%a%s%H$r;XDj$7$?;~$NLO<0?^(b

$B0lJ}!"(BVisual C++$B$N@_Dj$G%"%i%$%a%s%H$rJQ99$7$F$b!"(BMIDL(Microsoft IDL$B%3%s%Q%$%i(B)$B$K$O1F6A$7$^$;$s!#$9$k$H!"(BIDL$B%U%!%$%k$H!"(BC++$B8@8l$N%=!<%9%u%!%$%k$h$g!"%"%i%$%a%s%h$,?)$$0c$c$f$7$^$$$^$9!#$=$n7k2l!"%"%w%j%1!<%7%g%s%(%i!<$,h/@8$7$^$9!#(b

$B@_Dj2hLL$G%"%i%$%a%s%H$r;XDj$7$?;~$NLO<0?^(b

COM/DCOM$B$K$*$1$k%"%i%$%a%s%H$N0UL#(B

$B$H$3$m$G!"(BCOM/DCOM$B$r;H$&;~$K!"9=B$BN$N%"%i%$%a%s%H$r;XDj$9$k$N$O!"$I$&$$$&0UL#$,$"$k$N$G$7$g$&$+!#(B

C++$B8@8l$N%=!<%9%u%!%$%k$kbp$7$f%"%i%$%a%s%h$r;xdj$9$k$h!"9=b$bn$n%a%b%j>CHqNL$r>/$J$/$9$k$3$H$,$G$-$^$9!#$7$+$7!"(BIDL$B%U%!%$%k$KBP$7$F%"%i%$%a%s%H$r;XDj$7$F$b!"%/%i%$%"%s%H$H%5!<%p$n4v$ge>Aw$5$l$k%G!<%?nl$r8:$i$;$klu$g$o$j$$$h$&$g$9!#(b

COM/DCOM$B$N%^!<%7%c%j%s%0$o!"2<5-$n$h$&$k$j$c$f$$$^$9!#(b

$B%G!<%?7a<0$njq49$h%g!<%?e>Aw$NLO<0?^(b

COM/DCOM$B$O%P%$%J%j5,3J$G$9!#%/%i%$%"%s%H$H%5!<%p$n4v$n%g!<%?e>Aw7A<0$o!"(bndr (Network Data Representation) $B$H$7$F7h$a$i$l$F$$$^$9!#(B

C++$B8@8l$N9=B$BN$N7A<0$h!"(bndr$b7a<0$h$njq49$o!"%w%m%-%7$h%9%?%v$,9t$$$^$9!#%w%m%-%7$h%9%?%v$o!"(bidl$b%u%!%$%k$+$i!"(bmidl(microsoft IDL $B%3%s%Q%$%i(B)$B$K$h$C$F!"%W%m%-%7!&%9%?%V(BDLL$B$H$7$F@8@.$5$l$^$9!#(B

IDL$B%U%!%$%k$KBP$9$k%"%i%$%a%s%H$N;XDj$O!"%/%i%$%"%s%H$d%5!<%p$+$i!"$i$n$h$&$j%"%i%$%a%s%h$g9=b$bn$,eo$5$l$f$/$k$+$r!"%w%m%-%7$h%9%?%v$k65$($f$"$2$k!"$h$$$&0ul#$k$j$k$h$&$g$9!#(b

Visual C++$B$N@_Dj$G%"%i%$%a%s%H$rJQ99$7$F$7$^$&$H!"%W%m%-%7$,A[Dj$7$F$$$k%G!<%?7a<0$h!"

$B%"%i%$%a%s%H$NIT@09g(B

$B%"%W%j%1!<%7%g%s%(%i!<$o!"(bchkesp.c$b$h$$$&%u%!%$%k$gh/@8$7$^$7$?!#$3$n%u%!%$%k$,!"(bc++$b8@8l$n9=b$bn$h(bndr$b7a<0$h$njq49$k4x$o$c$f$$$k$h$&$g$9!#(b

$B%G!<%?$ne>AwNL$O8:$i$;$^$;$s$,!"%"%i%$%a%s%H$r>.$5$/$9$k$3$H$G!"$h$jBg$-$J9=B$BN$r

$BNc$($P!"

typedef struct {
 char a;
 double b;
} BarStruct;
 

$B$3$N9=B$BN$N%5%$%:$O!"(B1$B%P%$%H6-3&$G$"$l$P(B9$B%P%$%H!"(B8$B%P%$%H6-3&$G$"$l$P(B16$B%P%$%H$H$J$j$^$9!#(B

$B$3$N(BBarStruct$B9=B$BN$r;H$C$F!"

typedef struct {
 BarStruct data[4500];
} FooStruct;
 

$B%G%U%)%k%H$N(B8$B%P%$%H6-3&$G$O!"(BFooStruct$B$N%5%$%:$O(B72KB$B$H$J$k$?$a!"%3%s%Q%$%k$G$-$^$;$s!#$7$+$7!"%"%i%$%a%s%H$r(B1$B%P%$%H6-3&$K$9$k$H!"%5%$%:$,(B40KB$B$H$J$j!"(BCOM/DCOM$B$N4X?t$G

Copyright(C) Seiichi Yoshida ( comet@aerith.net ). All rights reserved.

$B%[!<%`(b

$BE7J8(B

$B%=%U%H%&%'%"9)3X(B

$B5;=Q%3%i%`(B

$B%=%U%H%&%'%"(B

$B8&5f3hF0(B

AltStyle $B$K$h$C$FJQ49$5$l$?%Z!<%8(b (->$B%*%j%8%J%k(B) /