- - PR -
C言語からVB.netで作成した.dllを呼出しクラスを利用する方法
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-10-25 10:32
開発初心者なのですが、ご存知の方がおられましたら教えてください。
上司より『C言語からVB.netで作成した.dllを呼出しクラスを利用する方法』 を調査しろと言われ途方に暮れています。 そもそも手続き型言語のCから、オブジェクト指向型のVB.NETを呼出すことは 可能なのでしょうか? よろしくお願いします。 | ||||||||
|
投稿日時: 2006-10-25 10:47
Windows環境(というかDLL自体がWindows環境なんだけど)であれば出来るんじゃないかなぁと。
(ただし、相当険しい道のりになりそうだけど。。。) 参考 CからC#を呼ぶ方法 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=7&topic=26471 追記 COMを前提に考えていくのであれば、 COM研究室 http://www5.plala.or.jp/atata/com/ を参考にするとよいでしょう。 [ メッセージ編集済み 編集者: Blue 編集日時 2006-10-25 11:12 ] | ||||||||
|
投稿日時: 2006-10-25 11:24
大変申し訳ございません。
サンプルのコードなどがありましたら、 いただけませんでしょうか。。 よろしくお願い致します。 [ メッセージ編集済み 編集者: ナチ 編集日時 2006-10-25 19:17 ] | ||||||||
|
投稿日時: 2006-10-26 00:07
#その上司は調査の仕方は教えないのだろうか。。。 「最近」はC言語そのものが存在しません。最低でC++言語です。 まぁMinGWとか、gccとかaccなら別でしょうけど。 ほんとに無いんですって。VS .NET 2003 でさえ売ってるの?って感じですし。 ということで皆がいう「C言語」と上記の「C言語」は違ってる可能性があります。 ちなみに「上司」がいう「C言語」はVisual Studio 6.0 SP5ぐらいではないかと。 勝手に想像します。 #だから分からないんだろう、と。 #ちなみに、SP 6ってないよね? なので、先に「何の」「C言語」かを聞いたほうがいいかも。最新のやつだと やたらと簡単です。#usingで終わってしまう。。。そうするとふつーに書くと IDEが指示するのですよ。この関数が使えるって。楽になったもんです。 | ||||||||
|
投稿日時: 2006-10-26 00:20
返信内容を全く別の内容に編集されると、未読状態にならないので分かりづらいです。
(実際レスがついて、初めて編集されていることに気付いた。) サンプルというか、「CからC#を呼ぶ方法 」のスレの CLSIDFromProgID を使うコードが主になります。 ただし、IDispatchをクラスとしてメソッドを呼び出しているのでそこを 関数テーブルから関数ポインタを使って自分自身を渡すように変更します。 具体的には
は
みたいな感じで。 それと、CoCreateInstance等の引数の型が若干変わっているので注意が必要です。 MicrosoftのサポートオンラインにOLEオートメーションの例がありますのである程度参考 にはなるでしょう。 [HOWTO] C++ アプリケーションではなく C アプリケーションから OLE オートメーションを使用する方法 http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B181473 更に参考 [HOWTO] Visual C++ を使用してオートメーションで文書プロパティにアクセスする方法 http://support.microsoft.com/kb/238393/ja 上はExcelを、下はWordを対象にしたコードになっています。 [ メッセージ編集済み 編集者: Blue 編集日時 2006-10-26 00:23 ] | ||||||||
|
投稿日時: 2006-10-26 08:32
http://www.microsoft.com/japan/msdn/vstudio/downloads/sp/vs6sp6.aspx | ||||||||
|
投稿日時: 2006-11-09 11:27
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34765&forum=7&4
のような無駄なことを考えてしまっているようなので(というかあちらでは私のコメントは無視されているようですが)、 [HOWTO]を参考にしたサンプルです。 まず、「登録されているVB.NETのID」を適切な文字列にして、 メッセージボックスが表示されずに終了すれば第一ステップはクリアです。 メッセージボックスが表示された場合、VB.NETでつくったDLLがCOMとして登録されていないということになります。
[ メッセージ編集済み 編集者: Blue 編集日時 2006-11-10 00:54 ] | ||||||||
|
投稿日時: 2006-11-09 11:38
申し訳ございません。大変失礼致しました。 サンプル提供ありがとうございます。 こちらで試してみたいと思います。 |