- PR -

C++のアンマネージコードからマネージコードのCALLについて

1
投稿者投稿内容
Tol
常連さん
会議室デビュー日: 2004/07/16
投稿数: 27
投稿日時: 2007-09-18 22:37
C++/CLIでのアンマネージコードからマネージコードの呼び方について質問があります。

以下の2つのプロジェクトがあるとします。

 ・プロジェクトA
  → アンマネージコードとして作成する。
    共通言語ランタイムのサポートを使用しないにする。

 ・プロジェクトB
  → 混在コードとして作成する。
    コンパイラオプションに、/clrオプションをつける。


この場合に、プロジェクトAからプロジェクトBを呼ぶことはできるのでしょうか?
できればCOMを使用せずに呼びたいと思うのですが、
そのような方法はないでしょうか?

一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-09-19 00:51
試してみましたが、単純にプロジェクトBを共通言語ランタイム サポートにすると、参照ができなくなるんですね。

逆に質問なんですが、プロジェクトAがプロジェクトBを参照しているということは、結局プロジェクトAを動かす環境には.NETフレームワークは必要だと思うんですが、プロジェクトAで共通言語ランタイムをサポートさせない理由というのはどういったものなんでしょうか。
Tol
常連さん
会議室デビュー日: 2004/07/16
投稿数: 27
投稿日時: 2007-09-19 11:03
引用:

逆に質問なんですが、プロジェクトAがプロジェクトBを参照しているということは、結局プロジェクトAを動かす環境には.NETフレームワークは必要だと思うんですが、プロジェクトAで共通言語ランタイムをサポートさせない理由というのはどういったものなんでしょうか。



実のところ、サポートさせない説得力のある理由がさしてないです。

開発機能に、機能Aと機能Bがあり、機能AはVisualC++6.0からの移行のため、
アンマネージで作成しました。
(移行といっても多少は機能を追加しているのですが)
で、機能Bは新規に作成したので、マネージコードとなりました。

それで、2つを結合させようとするとエラーになったみたいで、
泣きつかれてきて、あたりまえだろ・・・と思いながら、
機能Aを混在コードにすればといったのですが、
試験が終わっているからいやだといいはるので、なにか方法はないかと
思いご質問させていただきました。

おっしゃるとおりネイティブからマネージコードを呼ぶと
結局.NETフレームワークが必要になると思われるので、
バイナリレベルの移行なら話はわかるのですが、
ソースレベルでは意味がないといわれることは重々承知しているのですが・・・


Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2007-09-19 11:17
引用:

  • できればCOMを使用せずに呼びたいと
  • 機能Aを混在コードにすればといったのですが、
    試験が終わっているからいやだ


から、

引用:

機能Bは新規に作成したので、マネージコードとなりました。


をアンマネージドにするしかないのではないでしょうか?

そもそも機能Bをマネージドにした時点で間違っていたということに。
(機能Bをマネージドにするなら「機能Aを混在コードにすればといったのですが、
試験が終わっているからいやだ」といわれないようにちゃんと確認しておくべきだった)
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2007-09-19 11:43
追記

ラッパーDLLを作ってもかまわないのであれば、
COMを使ってBを呼び出してAに橋渡しすればBを作り直すよりいくらか楽になります。
(Bの使われ方がわからないので微妙ですが)
1

スキルアップ/キャリアアップ(JOB@IT)