C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Excelのバージョンの違いをカプセル化する方法について


(過去ログ 6 を表示中)

[トピック内 17 記事 (1 - 17 表示)]  << 0 >>

■7041 / inTopicNo.1)  Excelのバージョンの違いをカプセル化する方法について
  
□投稿者/ NZ-000 二等兵(2回)-(2006/10/02(Mon) 09:32:52)

分類:[C#] 


分類:[C#] 

環境:
WindowsXP SP2
VS2005 C# Windowsアプリケーション
Excel2000,2003共存


Excelはバージョンによって使うCOMライブラリが異なりますし、ライブラリによってインターフェースも異なるので非常に困惑しています。
現在主流のExcelは2003だと思いますが、2000もまだまだ現役のようです。
そこで2003または2000がインストールされているPCで、2003のファイルでも2000のファイルでも読み込める仕様を検討中です。

仕様は以下のようにしようと思っています。

1.インストールされているExcelのバージョンをチェックする。

2.開こうとするExcelのバージョンをチェックする。

3.バージョンが異なれば、アナウンス(ご使用のExcelでファイルを保存しなおしてください。とか)

4.バージョンが合えば、そのバージョンのExcelで開く。

そのような中疑問に思っていることを質問したいと思います。
(いくつかあります。スレッドを分けた方がよろしければ分けます。)


1.インストールされているExcelのバージョン判別方法
Excel.ApplicationクラスのVersionプロパティによってインストールされているExcelのバージョンを調べることができますが、使うCOMライブラリ自体を切り分けたいのでこのクラスを使用する前に判別する必要があります。
レジストリとかdllのバージョンで判別するのかなぁなどと考えていますが、答えにたどりつけませんでした。
何か方法があれば教えてください。


2.Excelファイルのバージョン判別方法
世間には、開く前にOfficeファイルのバージョンをチェックするソフトがいくつか転がっていますが、
私にはどのようにしてその機能を実現しているのかわかりませんでした。
バイナリファイルを無理やり開いて何か手がかりはないものかとも思いましたが、エンコードが混ざっていてバージョンらしき記述の部分が文字化けしてしまいます(なんかファイルの最後の方にファイル情報が記述されているようです)。
何か方法があれば教えてください。


3.二つのExcel用COMライブラリを一つのプロジェクトで参照するには
バージョンによってインターフェース(メソッド名、引数、名前空間)が異なるため、共通化できる部分が何一つとしてなく困っています。
(2000用のはInterop.Excel、2003用のはMicrosoft.Office.Interop.Excel)
それはさておき、参照設定に追加した際、ソリューションエクスプローラの一覧に表示される名前が同じ(Excelというなめ)になるのです。そのため、一つのプロジェクトで二つのExcel用COMライブラリを参照することができず、プロジェクトを分けなければなりません。分ければいいというのはごもっともな意見だと思いますが、今後のために参照設定に追加する際の名前を指定する方法があれば教えてください(あらかじめプロジェクトのどこか設定するのでしょうか)。

4.2000と2003が共存している環境で、バージョン指定でExcelを開く方法
共存環境を作成し、例えば、2000のCOMライブラリを用いてExcelを起動しようとしたにもかかわらず、
起動するExcelは2003の方です。予想では2000が起動するのかと思っていたので疑問に思っています。
ちなみにインストールは最初に2000、次に2003の順に行いました。
何か方法があれば教えてください。

0
引用返信 編集キー/
■7047 / inTopicNo.2)  Re[1]: Excelのバージョンの違いをカプセル化する方法について
□投稿者/ 渋木宏明(ひどり) 二等兵(12回)-(2006/10/02(Mon) 11:41:48)
渋木宏明(ひどり) さんの Web サイト

分類:[C#] 

> 1.インストールされているExcelのバージョン判別方法

Excel.Application.Version を参照するのが無難です。
.dll や .exe が存在していても、それが本当アプリケーション実行に使用されているものかを検査するのは困難です。
プロパティ値の取得くらいなら、C# でレイトバインドでオートメーションしても大した手間にはなりません。

> 2.Excelファイルのバージョン判別方法

調べたことが無いので分かりませんが、エクスプローラから Office ファイルの「プロパティ」を表示した時に「概要」タブに表示される情報の一部として記録されているかもしれないですね。
↑の情報の取得については、何度か掲示板等で見かけたことがあります。
(興味が無かったので具体的な手順は覚えてません)

> 3.二つのExcel用COMライブラリを一つのプロジェクトで参照するには

出来ないという前提で進めるしかありません。

> バージョンによってインターフェース(メソッド名、引数、名前空間)が異なるため、共通化できる部分が何一つとしてなく困っています。

そんなに違いますか?

名前空間は IDE が「参照設定」を行う際に勝手につけたものです。
手動で tlbimp すれば自分で好きなように付け替えられます。

メソッド名やプロパティ名に関しては「追加」や「拡張」はあると思いますが、「共通化できる部分が何一つ無い」ような状況ではないように見えます。

引数が「追加」されたメソッドはいくつかありますが、それらに対しては前述のようにレイトバインドでオートメーションで対応する他無いでしょう。
ただし、C# ではこーどの記述量が増大してしまうのが難点です。

> それはさておき、参照設定に追加した際、ソリューションエクスプローラの一覧に表示される名前が同じ(Excelというなめ)になるのです。そのため、一つのプロジェクトで二つのExcel用COMライブラリを参照することができず、プロジェクトを分けなければなりません。分ければいいというのはごもっともな意見だと思いますが、今後のために参照設定に追加する際の名前を指定する方法があれば教えてください(あらかじめプロジェクトのどこか設定するのでしょうか)。

IDE の挙動を制御する方法は知りません。
手動で tlbimp して、結果を IDE に取り込んでください。

> 4.2000と2003が共存している環境で、バージョン指定でExcelを開く方法
> 共存環境を作成し、例えば、2000のCOMライブラリを用いてExcelを起動しようとしたにもかかわらず、
> 起動するExcelは2003の方です。予想では2000が起動するのかと思っていたので疑問に思っています。
> ちなみにインストールは最初に2000、次に2003の順に行いました。
> 何か方法があれば教えてください。

どうしたいんですか?
上位バージョンが起動する分には問題ないように思えますが。


0
引用返信 編集キー/
■7050 / inTopicNo.3)  Re[2]: Excelのバージョンの違いをカプセル化する方法について
□投稿者/ まどか 少将(250回)-(2006/10/02(Mon) 12:15:41)

分類:[C#] 

#同じくあまりお勧めしないわけですが

こんなスレがありました。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=6833&forum=7&7

インストールバージョンについては、
HEKY_CLASSES_ROOTを見るとExcel.Application.バージョン番号となっているようですので
それを取得する方法があります。
そこのCLSIDからたどっていけばインストールパスがわかりますので
GetObject(VB関数)で指定したバージョンのインスタンスを作れそうです。


0
引用返信 編集キー/
■7054 / inTopicNo.4)  Re[3]: Excelのバージョンの違いをカプセル化する方法について
□投稿者/ 中博俊 神(761回)-(2006/10/02(Mon) 12:26:19)
中博俊 さんの Web サイト

分類:[C#] 

>メソッド名やプロパティ名に関しては「追加」や「拡張」はあると思いますが、
>「共通化できる部分が何一つ無い」ような状況ではないように見えます。

XP の PIAと、2003のPIAでは名前空間から違うのでそれの事を言っているのだと思われます。

0
引用返信 編集キー/
■7066 / inTopicNo.5)  Re[4]: Excelのバージョンの違いをカプセル化する方法について
□投稿者/ NZ-000 二等兵(3回)-(2006/10/02(Mon) 16:02:28)

分類:[C#] 

皆さん貴重なご意見ありがとうございます。

>渋木宏明(ひどり)さん

>Excel.Application.Version を参照するのが無難です。
>.dll や .exe が存在していても、それが本当アプリケーション実行に使用されているものかを検査するのは困難です。
>プロパティ値の取得くらいなら、C# でレイトバインドでオートメーションしても大した手間にはなりません。


遅延バインドについて以下を参照していて思ったことがあります。
http://support.microsoft.com/default.aspx?scid=kb;JA;302902

"遅延バインディングを使用するオートメーション クライアントの作成"

の項で以下のようにしてインスタンスを取得しています。
object objApp_Late;
Type objClassType;
objClassType = Type.GetTypeFromProgID("Excel.Application");
objApp_Late = Activator.CreateInstance(objClassType);

確かにこのソースを見る限りバージョンに依存したコードが消えているように思えます。
しかし、Versionプロパティを参照するためにはオブジェクト型のobjApp_Lateを
Excel.Applicationインスタンスにキャストしなければいけないと思います。
そして、その際どちらの(2000or2003)Excel.Applicationクラスを使うか考えることになるかと思います。
これを考えた時点でExcelのバージョンに依存してしまう気がしますがどうなんでしょうか。
例えば、それを2003のExcel.Applicationクラスを使って組んでおいて、2000しかインストールされていない環境で実行すると2003のCOMライブラリがありませんというエラーは出ないでしょうか?
(事前バインディングの場合はでました。当然ですが)
というより参照設定せずにそのクラスが使えるのかが不思議でならないのですが、あいにくまだコード上で試せていません。


>名前空間は IDE が「参照設定」を行う際に勝手につけたものです。
>手動で tlbimp すれば自分で好きなように付け替えられます。

参考になります。ただ以下に関して上記のこともあって、はたして全てを遅延バインディングで解決できるのか疑問に思っているため共通化部分が見えてきません。

>メソッド名やプロパティ名に関しては「追加」や「拡張」はあると思いますが、「共通化できる部分が何一つ無い」ような状況ではないように見えます。

Excelのバージョンによってインターフェースが異なる名前空間に個別に定義されています。Excelのアプリケーション変数を共通化することもできません。私はインストールされているExcelを判別した後は、それぞれのバージョンにあわせた独自のコードを書くしか道はないのではと思っていました。
まだちょっと先が見えていません。

>> 4.2000と2003が共存している環境で、バージョン指定でExcelを開く方法
>> 共存環境を作成し、例えば、2000のCOMライブラリを用いてExcelを起動しようとしたにもかかわらず、
>> 起動するExcelは2003の方です。予想では2000が起動するのかと思っていたので疑問に思っています。
>> ちなみにインストールは最初に2000、次に2003の順に行いました。
>> 何か方法があれば教えてください。

>どうしたいんですか?
>上位バージョンが起動する分には問題ないように思えますが。

前提としてプログラム内で勝手にExcelファイルのバージョンを書き換えたくないという思いがあります(いいわすれていましたが今回考えているのはExcelファイルのリードオンリーです)。
2000のみインストールしているユーザーと2003のみインストールしている間で一つのExcelファイルのバージョンが、このソフトを使うたびにころころ変わることになります。上書きした際にどの程度のデータが欠落するか定かでない(勉強不足)のため、できる限り書き換えたくないのです。

しかも現状では、例えば、2000で作られたExcelファイルを2003で開き閉じようとすると、何も変更を加えていないにも関わらず、バージョンの不一致から変更を保存するか聞いてくるダイアログがExcel側で自動でたちが上がります。これが出るとプログラム側でアプリケーションを閉じることがでません(プロセスをKillすればいける?)。

事前にExcelファイルのバージョンを調べる手段もわかっていないため、Excel.Application.Save()で無理やり上書きするしかありません。従って「このソフトでExcelファイルを使うとデータが欠落する可能性がありまっせ」という極めて迷惑なソフトに仕上がっています。


>まどかさん

>インストールバージョンについては、
>HEKY_CLASSES_ROOTを見るとExcel.Application.バージョン番号となっているようですので
>それを取得する方法があります。

なるほど、確かにありますね。2000と2003を共存させている環境で見ると、以下のようなキーがありました。
Excel.Application (←不明)
Excel.Application.11 (Excel2003)
Excel.Application.9 (Excel2000)

参考にさせてもらいます。

>そこのCLSIDからたどっていけばインストールパスがわかりますので

わかりました。

>GetObject(VB関数)で指定したバージョンのインスタンスを作れそうです。

ちょっとまだ調べきれていません。


>中博俊さん

>XP の PIAと、2003のPIAでは名前空間から違うのでそれの事を言っているのだと思われます。

XPと2003のPIAに相違があることは初耳でした。
http://www.microsoft.com/japan/msdn/office/office2003/OfficePrimaryInteropAssembliesFAQ.aspx
上記の下の方に個別に対応するように書いてありました。
ただ、ソースは不明ですが、ネット上から得た情報では以下の位置付けになっていました。
Excelバージョン : Microsoft Excel Object Libraryのバージョン
97以下 : 8
2000 : 9
2002 :10
2003,XP :11

2003とXPは同じCOMライブラリでいけるようでした。名前空間が違うという情報は見つけられませんでした。


何分、素人のため情報に乏しく返答に時間がかかってしまい申し訳ありません。
もう少し考えて結論が出せましたらレスして解決とさせていただきます。

0
引用返信 編集キー/
■7067 / inTopicNo.6)  Re[5]: Excelのバージョンの違いをカプセル化する方法について
□投稿者/ まどか 少将(252回)-(2006/10/02(Mon) 16:21:29)

分類:[C#] 

> しかし、Versionプロパティを参照するためにはオブジェクト型のobjApp_Lateを
> Excel.Applicationインスタンスにキャストしなければいけないと思います。

Object型に対してInvokeMemberすればよいのでは?
というかすべてObject型で扱うのが遅延バインディングのような。。。
#コンパイル時(コーディング時)に型がわからないということ

0
引用返信 編集キー/
■7076 / inTopicNo.7)  Re[6]: Excelのバージョンの違いをカプセル化する方法について
□投稿者/ NZ-000 二等兵(4回)-(2006/10/02(Mon) 17:11:05)

分類:[C#] 

>Object型に対してInvokeMemberすればよいのでは?
>というかすべてObject型で扱うのが遅延バインディングのような。。。

あぁ、なるほど。理解しきれていませんでした。申し訳ありません。
確かにこれならばバージョンに依存せずにVersionプロパティを参照できそうですね。
ふむふむ。


0
引用返信 編集キー/
■7097 / inTopicNo.8)  Re[7]: Excelのバージョンの違いをカプセル化する方法について
□投稿者/ NZ-000 二等兵(5回)-(2006/10/03(Tue) 13:13:11)

分類:[C#] 

遅延バインディング+オートメーションを使って、Excelのバージョンに依存するコード無しで実装することができました。
今回はExcelファイルのリードオンリーな上、比較的簡単なシートフォーマットだったため、遅延バインディングにわずらわしさを感じることなく実装できました。

また保存せずに終了することも、終了する前にApplicationオブジェクトのDisplayAlertsプロパティをfalseしておくことでできました。(Excelファイルのバージョンを調べること、及び起動するExcelのバージョンを指定する必要なくなりました)

ただ一つ気になるのは、2003しか入っていない環境にも関わらずRangeのValueプロパティが使えたり(2003用COMライブラリのRangeクラスにValueプロパティはないはず)、WorkBookのOpenメソッドの引数がファイルパスのみだったりと、まるでVBライクなことです。この辺はCOMインターフェースを実装しているおかげなのかなぁと思ったりしますが、ならインターフェースの定義はどこでにあるのと疑問に思います。

まぁ今回は各環境でうまく動作してくれたので良しとします。
皆様どうもありがとうございました。


解決済み
引用返信 編集キー/
■7102 / inTopicNo.9)  Re[8]: Excelのバージョンの違いをカプセル化する方法について
□投稿者/ 魔界の仮面弁士 中尉(159回)-(2006/10/03(Tue) 14:18:51)

分類:[C#] 

2006/10/03(Tue) 14:50:59 編集(投稿者)

> ただ一つ気になるのは、2003しか入っていない環境にも関わらずRangeのValueプロパティが使えたり

2003 であろうとなかろうと、Range オブジェクトは、Value プロパティを持っているのでは。
以下、Excel 8(Excel 97) と Excel 11(Excel 2003) のタイプライブラリの比較。


 [uuid(00020846-0000-0000-C000-000000000046)]
 dispinterface Range
 {
  (…略…)
  #if EXCEL8
   [id(0x00000006), propget]
   VARIANT Value();

   [id(0x00000006), propput]
   void Value([in] VARIANT rhs);
  #elseif EXCEL11
   [id(0x00000006), propget]
   VARIANT Value([in, optional] VARIANT RangeValueDataType);

   [id(0x00000006), propput]
   void Value([in, optional] VARIANT RangeValueDataType, [in] VARIANT rhs);
  #endif
  (…略…)
 };


 [uuid(00020846-0001-0000-C000-000000000046)]
 interface IRange : IDispatch
 {
  (…略…)
  #if EXCEL8
   [propget]
   HRESULT _stdcall Value([in, lcid] long lcid, [out, retval] VARIANT* RHS);

   [propput]
   HRESULT _stdcall Value([in, lcid] long lcid, [in] VARIANT RHS);
  #elseif EXCEL11
   [propget]
   HRESULT _stdcall Value([in, optional] VARIANT RangeValueDataType,
              [in, lcid] long lcid, [out, retval] VARIANT* RHS);
   [propput]
   HRESULT _stdcall Value([in, optional] VARIANT RangeValueDataType,
              [in, lcid] long lcid, [in] VARIANT RHS);
  #endif
  (…略…)
 };


> WorkBookのOpenメソッドの引数がファイルパスのみだったりと、
Workbook.Open というメソッドは、定義されていないと思います。(Open イベントの事では無いですよね?)

Workbooks.Opens というメソッドならば定義されていますけれども、それにしても
「引数がファイルパスのみ」という定義では無く、『[in, optional] VARIANT ReadOnly』などの
省略可能な引数が十数個ほど用意されているはずです。

------------

<Excel97>
 [id(0x000002aa)]
 HRESULT Open([in] BSTR Filename, /* 12個のoptional引数 */, [in, lcid] long lcid, [out, retval] Workbook** RHS);
</Excel97>

<Excel2003>
 [id(0x000002aa)]
 HRESULT _Open([in] BSTR Filename, /* 12個のoptional引数 */, [in, lcid] long lcid, [out, retval] Workbook** RHS);

 [id(0x00000783)]
 HRESULT Open([in] BSTR Filename, /* 14個のoptional引数 */, [in, lcid] long lcid, [out, retval] Workbook** RHS);
</Excel2003>

解決済み
引用返信 編集キー/
■7133 / inTopicNo.10)  Re[9]: Excelのバージョンの違いをカプセル化する方法について
□投稿者/ NZ-000 二等兵(6回)-(2006/10/03(Tue) 19:16:05)

分類:[C#] 

>魔界の仮面弁士さん

私が根本的な勘違いをしているのかもしれません。
とりあえず一つ目の勘違いとして

>> WorkBookのOpenメソッドの引数がファイルパスのみだったりと、

上記のWorkBookはWorkBooksの間違いでした。申し訳ありません。
ただ、WorkBooksにはあるのはOpenメソッドであってOpensではないように思いますがどうなんでしょうか。
http://msdn2.microsoft.com/ja-jp/library/microsoft.office.interop.excel.workbooks.open.aspx


Valueプロパティに関しては確かにMSDNにも載っているのですが実際に使おうとすると以下のようなエラーが出ます。

エラー 3 プロパティ、インデクサまたはイベント 'Value' は、この言語でサポートされていません。アクセサ メソッドの 'Microsoft.Office.Interop.Excel.Range.get_Value(object)' または 'Microsoft.Office.Interop.Excel.Range.set_Value(object, object)' を直接呼び出してください。

VS2005のコードアシスト機能を使いましてもValueプロパティは出てきません。
なのでMSDNが間違っているのかなぁと思っていました。

0
引用返信 編集キー/
■7135 / inTopicNo.11)  Re[10]: Excelのバージョンの違いをカプセル化する方法について
□投稿者/ 魔界の仮面弁士 大尉(163回)-(2006/10/03(Tue) 19:22:51)

分類:[C#] 

> ただ、WorkBooksにはあるのはOpenメソッドであってOpensではないように思いますがどうなんでしょうか。
うわはははははっ(脂汗
情け無いことに、今度はこちらのスペルミスです。すみません。


> Valueプロパティに関しては確かにMSDNにも載っているのですが実際に使おうとすると以下のようなエラーが出ます。
それは、言語仕様上の問題です。
VB.NET とは異なり、C# は引数つきのプロパティをサポートしていないためです。
(ついでに言うと、省略可能引数も C# ではサポートされていません)

そのかわりに、COM相互運用アセンブリは、その Value プロパティに対応する
『get_Value(引数)メソッド』を用意しますので、C# 側では、それを使って
事前結合によるアクセスを行えるようになっています。

0
引用返信 編集キー/
■7139 / inTopicNo.12)  Re[11]: Excelのバージョンの違いをカプセル化する方法について
□投稿者/ NZ-000 二等兵(7回)-(2006/10/03(Tue) 19:45:10)

分類:[C#] 

>それは、言語仕様上の問題です。
>VB.NET とは異なり、C# は引数つきのプロパティをサポートしていないためです。
>(ついでに言うと、省略可能引数も C# ではサポートされていません)

>そのかわりに、COM相互運用アセンブリは、その Value プロパティに対応する
>『get_Value(引数)メソッド』を用意しますので、C# 側では、それを使って
>事前結合によるアクセスを行えるようになっています。

なるほど。でもMicrosoft Excel9.0 Object Library(Excel2000用のやつ)を利用した場合はValueプロパティが使えるのですよね(get_Valueは使えない)。つまり型を指定したデータの取得はできないことになります(つか引数使ったことないけど)。

うーん、わからなくなってきたので整理すると
2000時にはできなかった型指定が2003でできるようになった。VBはプロパティに引数を指定できるので対応できたが、C#は対応できないので仕方なくアクセサーを公開した。インターフェースはValueで定義している・・・というわけですかな。


0
引用返信 編集キー/
■7140 / inTopicNo.13)  Re[12]: Excelのバージョンの違いをカプセル化する方法について
□投稿者/ NZ-000 二等兵(8回)-(2006/10/03(Tue) 19:45:45)

分類:[C#] 

解決がいつのまにか外れてました。

解決済み
引用返信 編集キー/
■7151 / inTopicNo.14)  Re[12]: Excelのバージョンの違いをカプセル化する方法について
□投稿者/ 魔界の仮面弁士 大尉(164回)-(2006/10/03(Tue) 22:35:28)

分類:[C#] 

> (get_Valueは使えない)。
引数無しバージョンのアクセサを呼ぼうとすると、C#コンパイラは CS0571 エラーを
吐きますが、リフレクションによって MethodInfo.Invoke する事は可能だと思います。


> (つか引数使ったことないけど)。
中には、バージョンによって戻り値の有無が変化するメソッドさえありますね…。


> 2000時にはできなかった型指定が2003でできるようになった。
?? それは、どういう意味でしょうか?


> インターフェースはValueで定義している・・・というわけですかな。
ですね。その COM 側の定義に関しては、No7102に記載したようになっています。

解決済み
引用返信 編集キー/
■7162 / inTopicNo.15)  Re[13]: Excelのバージョンの違いをカプセル化する方法について
□投稿者/ NZ-000 二等兵(9回)-(2006/10/04(Wed) 01:11:21)

分類:[C#] 

>> 2000時にはできなかった型指定が2003でできるようになった。
>?? それは、どういう意味でしょうか?

Excelはバージョン2002からXMLへの対応が図られています。
2000以前にはその機能がなかったため、当時のValueプロパティには引数はなく、
C#でオートメーションを利用する際にも当然Valueプロパティが使えました。
しかし、2002以降スプレッドシートからRangeオブジェクトを介してDOMドキュメントを抽出できるようになったため、
Valueプロパティに引数が設けられました。
C#はプロパティに引数を与えることができなかったため、アクセサーを公開せざるえませんでした。
引数にはxlRangeValueDataType列挙型の値を指定するようです。

・・・というのが今現在の私の解釈で、
レスしたときは、MSDNにget_Value(RangeValueDataType)と書いてあったのを、
単純に戻り値の型を指定できるものと解釈していました。勘違いです。申し訳ありません。

解決済み
引用返信 編集キー/
■7164 / inTopicNo.16)  Re[14]: Excelのバージョンの違いをカプセル化する方法について
□投稿者/ NZ-000 二等兵(10回)-(2006/10/04(Wed) 01:48:58)

分類:[C#] 

せざるえなかったっていう表現はいらぬ誤解を招きそうなので、
"引数を指定できるアクセサーを提供した"に言い直しておきます。
なら指定しない場合ようにValueプロパティも残しといてほしk(ry

解決済み
引用返信 編集キー/
■7165 / inTopicNo.17)  Re[15]: Excelのバージョンの違いをカプセル化する方法について
□投稿者/ 渋木宏明(ひどり) 二等兵(14回)-(2006/10/04(Wed) 04:31:45)
渋木宏明(ひどり) さんの Web サイト

分類:[C#] 

> なら指定しない場合ようにValueプロパティも残しといてほしk(ry

出来るんならやってたでしょうね。

遅延バインドによるオートメーションは IDispatch インターフェースによる機能呼ぶ出しによって実現されているため、同名で引数や戻り値型だけが異なる機能呼び出しを同居させることが出来ないのです。


0
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -