- PR -

VC++.NETとVB.NETでの統合開発の手法は?

投稿者投稿内容
たけやん
会議室デビュー日: 2004/11/10
投稿数: 9
投稿日時: 2004-11-10 14:39
度々、申し訳ありません。

.NETのソリューション内に、VC++.NETプロジェクトとVB.NETプロジェクトを作成し、夫々のプロジェクト内に幾つかの関数を作成しました。

お伺いしたいのは、
@VC++プロジェクト内から、VBプロジェクト内で作った関数をコールする方法。
A@の逆で、VBプロジェクト内から、VC++プロジェクト内で作った関数をコールする方法。

色々と調べてはみたのですが、上手く出来ません。
どなたかご教授下さいますよう、お願い致します。

_________________
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2004-11-10 16:52
共通に使われるものをDLLにし、参照指定すればできますよ。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-11-10 19:31
引用:

たけやんさんの書き込み(2004-11-10 14:39)より:

@VC++プロジェクト内から、VBプロジェクト内で作った関数をコールする方法。
A@の逆で、VBプロジェクト内から、VC++プロジェクト内で作った関数をコールする方法。

色々と調べてはみたのですが、上手く出来ません。


 いろいろ調べてみると、『「うまくいきません」とは、どういうことですか。具体的に、何が、どううまくいかないのか、書いてください』みたいなことが書いてあることに気がつくと思うのですが・・・

 単純にAプロジェクトとBプロジェクトがあるとして、AからBを呼び出しかつ、BからAを呼び出すことは、VS.NET上ではできません。「循環参照」をキーに、検索してみてください。コンパイラで直に循環参照させる方法、VS.NET上での逃げ方、など、@IT内で既出です。VC.NETとVB.NETも既出のはず。

_________________
たけやん
会議室デビュー日: 2004/11/10
投稿数: 9
投稿日時: 2004-11-10 20:58
catsさん、Jittaさん、ご返答ありがとうございます。

以前、VS6.0で開発していた時は、VC++をDLL化し、VBでDeclare宣言して呼び出しておりました。(Aのコール方法です)
.NETは、未だ使い始めたばかりで、複数言語で開発したコード(プロジェクト)を、そのまま同一のソリューションでビルドすれば、MS固有の中間言語(MSIL?)におちて、互いを参照し合えるのかと思っておりました。。。
やはり、DLLを使わないと呼び合えないのでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-11-11 05:16
引用:

たけやんさんの書き込み (2004-11-10 20:58) より:
catsさん、Jittaさん、ご返答ありがとうございます。

以前、VS6.0で開発していた時は、VC++をDLL化し、VBでDeclare宣言して呼び出しておりました。(Aのコール方法です)
.NETは、未だ使い始めたばかりで、複数言語で開発したコード(プロジェクト)を、そのまま同一のソリューションでビルドすれば、MS固有の中間言語(MSIL?)におちて、互いを参照し合えるのかと思っておりました。。。
やはり、DLLを使わないと呼び合えないのでしょうか?


私、そんなこと書いてます?


 「うまくいかない」とは、具体的にどういう現象が発生しているのか、説明してください。

 VS.NET上で、AとBが互いに参照し合う「循環参照」はできません。

 コンパイラには、循環参照を指示することができます。

 コンパイラへの循環参照指示の方法、VS.NET上で循環参照をさける方法については、@IT内にすでにスレッドがあります。



これくらい落とせば、理解していただけますか?

 マニュアルを読むと、「マネージドコードならば、EXEファイルから連結することも可能」と書いてあったと思いますけど。
 そして、「クラスライブラリ」でプロジェクトを作ると、勝手にDLLになります。
_________________
たけやん
会議室デビュー日: 2004/11/10
投稿数: 9
投稿日時: 2004-12-22 17:26
だいぶ間が空いてしまいましたが、また素人質問をお許し下さい。

ソリューションにVBプロジェクトとVC++プロジェクト(クラスライブラリ)が在ります。
VBプロジェクト内から、VC++プロジェクト内の関数をコールしたいのですが、やり方が分かりません。(VBプロジェクトの参照設定に、VC++プロジェクトを追加してあります)
宜しくお願い致します。

--- VC++ ----------------
int func(char *p)
{
return (0);
}
--- VB ------------------
Public Class Form1
Inherits System.Windows.Forms.Form
<...途中処理省略...>
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

'★ここでC++のfunc()をコールしたい
End Sub
End Class
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-12-27 22:19
 他言語でコールできるようなC++のプロジェクトは組んだことがないので詳しいことはわかりませんが、MSDN内のC++関係のトピックを漁ると、DLLから外部に関数を公開する方法が書いてあったと思いますが、そういうところはチェックしましたか?
# 「いろいろ調べた」を具体的に書けば早くすむのに

とりあえず、『C++ マネージ拡張の開発シナリオ』とか

_________________
たけやん
会議室デビュー日: 2004/11/10
投稿数: 9
投稿日時: 2004-12-28 12:40
Jittaさん、お世話になります。

ご紹介頂きましたURLを拝見しました。
C++ DLL(CLR)での呼び方には、以下のような「おまじない(?)」を書くのですね。
とても参考になりました。
ですが私の知りたい事は、VBからVC++ DLL(CLR)内の関数の呼び方でありまして、VB側ではどのようなコードを書けば、VC++ DLL(CLR)側内の関数を呼べるようになるのかです。
宜しくお願い致します。

#using <mscorlib.dll>
using namespace System::Runtime::InteropServices;
public __value struct TraditionalDLL
{
[DllImport("TraditionalDLL.dll")]
static public int PickANumber();
};

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