- ベストアンサー
c言語で作成したデータをwindowsのアプリ(VB6で作成)で読み取りたいのですが
VBで作成したアプリの中の変数の値をC言語で作成したプログラムで参照したり、C言語の変数(メモリの値)をVBのアプリで参照したいのですが、どのようにすればいいのでしょうか。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>このAのプロパティをCコンパイラ の「LSI C-86試食版」で作成したプログラムBから読み書きしたいのです。この方法を教えていただけませんか。 C言語からでもCOMを利用することは可能ですが、LSI CはもともとMS-DOSやコンソール用のアプリケーション開発ソフトなので、もしかするとCOMの利用はできないかもしれません(私自身LSI-Cの知識がないのでわかりません)。 VCなどwindowsプログラミングに対応しているものの方がいいかもしれません。 VCでは #import "progid:aaa.bbb.1" no_namespace, named_guids void Test() { long n; Ibbb* pBbb; CoInitialize(NULL); CoCreateInstance(&CLSID_bbb,NULL,CLSCTX_INPROC, &IID_Ibbb,(void **)&pBbb); n = pBbb->lpVtbl->プロパティ; pBbb->lpVtbl->Release(pBbb); CoUninitialize(); } のようにします(もしかするともう少し修正する必要があるかもしれません)。このときaaaやbbbはCOMによって異なります。LSI-Cでは#importは動かないと思いますので自分でCOM用のヘッダーを書く必要があります。またCoInitializeのようなWindowsAPIもPlatformSDKからヘッダーを持ってくるなどして使えるようにする必要があると思います。
その他の回答 (2)
- rentahero
- ベストアンサー率53% (182/342)
LSI-C86はMS-DOS用ですので、Win16やWin32のプログラムを作成できません。MS-DOSでいうcomモデルとはCP/M86互換モードのことで、exeではなく、comの拡張子を持ったプログラムのことです。また、LSI-C86試食版はスモールモデル(exeですがcomと同じ64kB制限があります)専用です。 以下に無償版のWin32対応Cコンパイラを挙げておきます。 ボーランド Borland C++ Compiler 5.5 http://www.borland.co.jp/cppbuilder/freecompiler/ マイクロソフト .NET Framework SDK Version 1.1 http://www.microsoft.com/downloads/details.aspx?FamilyId=9B3A2CA6-3647-4070-9F41-A333C6B9181D&displaylang=ja 以下は英語リソースです。 Microsoft Microsoft Visual C++ Toolkit 2003 http://msdn.microsoft.com/visualc/vctoolkit2003/ SciTech Software Open Watcom 1.3 http://www.openwatcom.com/ この中でOpen Watcomだけが統合環境がついています。それ以外はコンパイラのみです。
お礼
貴重な情報をありがとうございます。 LSI-C86しか使用したことがありませんでしたし,教えていただいたことは何も知りませんでした。早速,調べてみます。ありがとうございました。
補足
Borland C++ Compiler 5.5をダウンロードし勉強を始めています。結果が報告できなくて残念ですが、締切期限がきましたので締め切らせていただきます。ありがとうございました。
- nitscape
- ベストアンサー率30% (275/909)
A.あるプログラム B.あるプログラムの変数を参照したいプログラム としたときにAが変数を外部から参照できるように作っていないといけません。これはAやBがVBやVCのどちらで開発されていても同じです。 ※実際にはAに参照できるようにするための機能がなくても、メモリ内容を覗き見て参照してしまうことも可能ですが、普通はAに外部から参照するための機能を作っておきます。 参照できるようにするための方法はたくさんあります。 1番簡単なのはAが変数の値をファイルやレジストリに書き出して、Bはその書き出されたファイルやレジストリを読み出す、という方法です。 最近の質問 http://okweb.jp/kotaeru.php3?q=1251865 にあるCreateFileMappingのような方法を使ってもいいです。この質問での場合は4バイト程度のメモリ(変数)を共有しています。 AがDLLのように関数をエクスポートしてもいいと思います。関数の戻り値としてデータを返せばいいわけです。 1番スマート(だけど1番面倒)なのはAにインターフェースを公開させる(COMとして作る)方法です。BはVBScriptで作られていてもAのデータを簡単に参照できるほど汎用性が高いです。 ほかにも色々な方法がありますが、どれも一長一短です。データを参照する目的などを考えて方法を選ぶといいと思います。
お礼
ご回答ありがとうございました。 実は、ACTIVEX作成の本を購入してきまして、AのプログラムはCOMとして作成しました。 このAのプロパティをCコンパイラ の「LSI C-86試食版」で作成したプログラムBから読み書きしたいのです。この方法を教えていただけませんか。 一応、COMを作りましたが,COMについての知識は余りありませんのでよろしくお願いします。
お礼
ご回答ありがとうございます。 方法はあるんですね。VCは初めてですので、勉強してみます。ありがとうございました。
補足
C++ の勉強を始めています。結果が報告できなくて残念ですが、締切期限がきましたので締め切らせていただきます。ありがとうございました。