50166


Visual C++ には `#import`
というディレクティブがあることを[別のご質問](https://ja.stackoverflow.com/q/50142/19110)で知りました。[MSDN
によると](https://docs.microsoft.com/ja-jp/cpp/preprocessor/hash-import-directive-
cpp?view=vs-2017) `#import` は「タイプ
ライブラリからの情報を組み込むために使用」するらしいのですが、いまいちユースケースが分かりません。

`#import` は具体的にどのような場面で使うディレクティブなのでしょうか？

### 関連質問？

  * [C++ include and import difference](https://stackoverflow.com/q/172262/5989200) \-- Stack Overflow
  * [Replacement for #import in Visual C++](https://stackoverflow.com/q/650578/5989200) \-- Stack Overflow


CC BY-SA 4.0
2018-11-09T20:56:25.933
50143
2019-03-09T15:05:40.733
19110
question
c++ visual-c++
VC++ の #import はどんなとき使う？


C++言語ではヘッダーファイルでプロトタイプ宣言を行い、リンクは別の仕組みを使っています。ヘッダーファイルはC++言語特有のもので、他のプログラミング言語との相互運用が困難になります。

そこでMicrosoftは言語非依存・プラットフォーム非依存の[COM; Component Object
Model](https://docs.microsoft.com/en-us/windows/desktop/com/component-object-
model--com--portal)を定義しました。この中でIDL; Interface Definition LanguageとTLB; Type
Libraryが定義されています。  
その上で、C++言語ソースからType Libraryを読み込む機能が`#import`ディレクティブとなっています。

ですので、COMを呼び出しを行わない限りは出番はありません。


CC BY-SA 4.0
2018-11-10T09:22:19.043
50166
2018-11-10T09:22:19.043
4236
50143
answer


c++ で、odbc や、 ADO を使って、 データベースやExcel フォームへアクセスするという場合には、  
使うこともあります。  
データベースアクセスには、普通、DAOとかRDOとかなので、特にADO指定でないと、出番は少ないかもしれませんね。  
Oracle はいまだにoo4oとかですものね。  
あとは、excel が吐き出すダブルクォーテーションで、フィールドを括った書式のcsvファイルをc++のチカラ技でなく、  
何とか外部ライブラリーを使って読み書きしたい場合は出番があるかもしれないですね。

ADOを使うには、以下のサイトが参考になります。

Visual C++ での ADO プログラミング  
<https://docs.microsoft.com/ja-jp/sql/ado/guide/appendixes/visual-c-ado-
programming?view=sql-server-2017>

ちなみに c/c++言語で #import を使わずに、 IDispach* を使ってADO 等の COM オブジェクトにアクセスする方法は  
あるにはありますが。かなり大変なので、使えるのであれば #import ディレクティブを使うとよいでしょう。

gcc など、 #import がサポートされていないコンパイラ群で、ADO 経由で SQL-Server へアクセスするなんて、  
考えただけでも嫌になるほど面倒臭いですから。

csvにADO経由でアクセスする方法は比較的簡単に実験できると思うので、  
実際に使ってみるのもよいかもしれません。


CC BY-SA 4.0
2019-03-09T15:05:40.733
53323
2019-03-09T15:05:40.733
32480
50143
answer