- - PR -
C++のアンマネージコードからマネージコードのCALLについて
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-09-18 22:37
C++/CLIでのアンマネージコードからマネージコードの呼び方について質問があります。
以下の2つのプロジェクトがあるとします。 ・プロジェクトA → アンマネージコードとして作成する。 共通言語ランタイムのサポートを使用しないにする。 ・プロジェクトB → 混在コードとして作成する。 コンパイラオプションに、/clrオプションをつける。 この場合に、プロジェクトAからプロジェクトBを呼ぶことはできるのでしょうか? できればCOMを使用せずに呼びたいと思うのですが、 そのような方法はないでしょうか? | ||||||||
|
投稿日時: 2007-09-19 00:51
試してみましたが、単純にプロジェクトBを共通言語ランタイム サポートにすると、参照ができなくなるんですね。
逆に質問なんですが、プロジェクトAがプロジェクトBを参照しているということは、結局プロジェクトAを動かす環境には.NETフレームワークは必要だと思うんですが、プロジェクトAで共通言語ランタイムをサポートさせない理由というのはどういったものなんでしょうか。 | ||||||||
|
投稿日時: 2007-09-19 11:03
実のところ、サポートさせない説得力のある理由がさしてないです。 開発機能に、機能Aと機能Bがあり、機能AはVisualC++6.0からの移行のため、 アンマネージで作成しました。 (移行といっても多少は機能を追加しているのですが) で、機能Bは新規に作成したので、マネージコードとなりました。 それで、2つを結合させようとするとエラーになったみたいで、 泣きつかれてきて、あたりまえだろ・・・と思いながら、 機能Aを混在コードにすればといったのですが、 試験が終わっているからいやだといいはるので、なにか方法はないかと 思いご質問させていただきました。 おっしゃるとおりネイティブからマネージコードを呼ぶと 結局.NETフレームワークが必要になると思われるので、 バイナリレベルの移行なら話はわかるのですが、 ソースレベルでは意味がないといわれることは重々承知しているのですが・・・ | ||||||||
|
投稿日時: 2007-09-19 11:17
から、
をアンマネージドにするしかないのではないでしょうか? そもそも機能Bをマネージドにした時点で間違っていたということに。 (機能Bをマネージドにするなら「機能Aを混在コードにすればといったのですが、 試験が終わっているからいやだ」といわれないようにちゃんと確認しておくべきだった) | ||||||||
|
投稿日時: 2007-09-19 11:43
追記
ラッパーDLLを作ってもかまわないのであれば、 COMを使ってBを呼び出してAに橋渡しすればBを作り直すよりいくらか楽になります。 (Bの使われ方がわからないので微妙ですが) |
1