いつもお世話になってます。

前回、http://okwave.jp/qa4949997.html にて質問させていただきました。最終的にはこのページのようなことをしたいのですが、とりあえずRubyファイルをコンパイルし、exeファイルに変換することはできました。

そこで次はそのexeファイルを実行させるC/C++コードが必要になってくるのですが、C/C++はあまり詳しくないのでよくわかりません。

ちなみにコマンド引数も使うexeファイルです。

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

exeファイルを実行させたいということでしょうか?



「Exerb」というコンパイラは分からないので、
使えるかどうかは分からないのですが、
API関数に、
ShellExecute();
http://msdn.microsoft.com/ja-jp/library/cc422072 …
CreateProcess();
http://msdn.microsoft.com/ja-jp/library/cc429066 …
WinExec();
http://msdn.microsoft.com/ja-jp/library/cc429435 …
という関数があります。
    • good
    • 0
この回答へのお礼

これは探していたものにかなり近いものです!

ぜひ使ってみたいと思います。ありがとうございました。

お礼日時:2009/05/18 18:11

Rubyで書かれたコードが、例えば10+20を計算するものだったとします(あくまで例です)。


それをコンパイルしてできあがったexeファイルがあるのですよね。
それを、C/C++から実行するようなコードを書いたとしても、
そのC/C++プログラムは、exeファイルを実行するためのもので、
10+20を計算するコードが書いてあるわけではないですよね。
ところが、

>ソースをc/cppで欲しいと言われている

その方は、10+20を計算するコードをC/C++でほしい、とおっしゃっているのですよね。

ということは、Rubyで書いたexeファイルをC/C++から実行するコードを書いたとしても、
その方の目的を達成できないのではないでしょうか。
    • good
    • 0
この回答へのお礼

確かにそのとおりですね。

とりあえずAPI関数でやってみてうまくいかなかったらc/c++で書いていくしかないと思ってます。

ありがとうございました。

お礼日時:2009/05/18 18:11

「exeファイル」と言う単語が出てきてますので、実行環境は Windows か MS-DOS だろうと仮定します(実行環境を尋ねるまでもないですよね?)



普通 Windows で Ruby を扱う際にはコマンドプロンプトを用います。

なので、Ruby を起動するCで書いたプログラムも、コンソールアプリケーションとして作成し、コマンドプロンプトで動かします。

コンソールアプリケーションで外部コマンドを起動する最も簡単な方法は「system関数を呼ぶ」です。

#include <stdlib.h>
int main(int argc,char *argv[])
{
  int Result;
  Result = system("ruby 'ruby_pro.rb'");
}

このプログラムは、Ruby.exe(Ruby 本体)がパスの通った所にある状態で、コマンドプロンプトで

ruby 'ruby_pro.rb'

と打ち込んで Ruby を起動したのと同等の事をします。

もし、コマンドプロンプトで

ruby 'ruby_pro.rb'

と打ち込んで

コマンドまたはファイル名が違います.

と表示された時は、Ruby にパスが通ってなくて起動できないので、Ruby にパスを通して下さい。

ただし、system関数の場合、中間にシェルが入る為に実行環境に依存しているので、起動したコマンドから返された戻り値や、コマンドが起動できなかった時の戻り値が呼び出し元に正しく返されて来ない場合があります。

詳細な戻り値が欲しい場合は、system関数を呼ばず、Ruby.exe を「直接起動」しなければなりません。もちろん、その場合、自分でパス変数を追いかけて Ruby.exe を探し出し、フルパス指定で Ruby.exe を起動しなければなりません(つまり、自分で、シェルがやっているのと同じ事をしないとならない)

この回答への補足

親切な解答、誠にありがたいのですが、やりたいことは少し違うようです。
Ruby環境がなくてもRubyで作ったプログラムを動かせるようにするためにexeファイルを作ったのですが、そのexeファイルをc/c++で実行させるようにしたいということです。

ソースをc/cppで欲しいと言われているのですが、そのプログラムをrbで作ってしまったのでどうすればいいか悩んでいる次第です。
c/cppで作りなおせと言われたらそれでおしまいですが・・

補足日時:2009/05/18 16:49
    • good
    • 0

>Rubyファイルをコンパイルし、exeファイルに変換することはできました。



この話と

>そこで次はそのexeファイルを実行させるC/C++コードが必要になってくる

この話は、どう結びつくのでしょうか?
Rubyファイルをコンパイルして作ったexeファイルを、直接実行することはできないのでしょうか?
    • good
    • 0
この回答へのお礼

つまり、Rubyで書いたコードの内容をC/C++で実行できるようにしたい、ということです。

そうなるとexeファイルを作るしかないらしいので、そうしました。。

お礼日時:2009/05/18 16:48

環境とか書かれてませんが、



OSは?
コンパイラは?

何を使っていますか。

C言語から、外部コマンドを実行するなら、
int system(const char *command);関数が使えるかも。

この回答への補足

説明不足で申し訳ございません。
OS: windows vista
コンパイラ: Exerb
です。

補足日時:2009/05/18 16:27
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC言語 コンパイラ

C言語のコンパイラを無料でインストールしたいのですが
気に入ったのが見つかりませんでしたぁ
いいコンパイラがあったら教えてください
よろしく御願いします

Aベストアンサー

その前に対象OSやプラットフォームなどの環境を書かないと何とも
いえないと思います。

クロスコンパイラならみなさんのいうようにGCCが一番でしょうし、
Winに限定するならBCCかVC++ Express Editionがいいでしょう。
MS-DOSならLSI C-86試食版なんてのもありますけど。

なんか、上手く動作しないけどWatcom Cなんて手もあるかも。

Cだけでいいのか、C++が使えた方がいいのかによっても異なります。

参考URL:http://ja.wikipedia.org/wiki/C%E8%A8%80%E8%AA%9E

QC,C++,C++/CLIの構造体とクラス

C++の構造体・クラスって、メンバのアクセス指定子のデフォルトが
privateかpublicかという違い「だけ」しか全くないのでしょうか?

クラスにおける
value class / ref class
という分類はC++/CLIのもので
これについては
value class の方は C言語の構造体に近いという事でいいでしょうか?

ref classの方は
ネイティブのC++のクラスを
マネージ用にしたようなもので

C++/CLIの構造体は
C++のそれと同じで
OKですか?

そしてそれらの構造体には、値型・参照型といった分類はないのでしょうか?

Aベストアンサー

> ということは、structも継承可、という事でしょうか?

structでも継承可能です。

> 継承のアクセス指定の方は
> クラスと構造体ではどうなるのでしょうか?

class A : Base {};



class A : private Base {};

と等価です。
一方、

struct A : Base {};



struct A : public Base {};

と等価です。

> そして「集成体」というのが初めて知ったのですが
> これはいわゆる、配列や・・・ある条件下でのクラス・・?
> なのでしょうか?

配列と以下の条件をすべて満たすクラスのことです。
・ユーザー定義のコンストラクタを持たない
・非公開または限定公開のメンバを持たない
・基底クラスを持たない
・仮想関数を持たない

ちなみにC言語の集成体は、配列と構造体の総称です(共用体は集成体ではありません)。

QC言語のコンパイラについて

私は、高校でC言語を使った授業をしています。
学校のPCではMinGWのコンパイラを使っています。
家のPCでもC言語をしたいのですがコンパイラの入手法がわかりません。
どなたか教えてください。

Aベストアンサー

あなたの自宅のPCがwindowsであるならば、Cygwinを使われたらどうでしょう?
mingwのCコンパイラも存在します。

参考URL:http://cygwin.com/

QC++/CLIのデフォルト引数

C++/CLIについて質問です。

C++/CLIは、デフォルト引数を指定できないのですか?
ネットで調べてもでてきませんでした。

できるなら、やり方をご教授お願いします。

Aベストアンサー

C++/CLI はそれほど詳しくないので断定はできませんが、おそらく無理です。

QC言語でのコンパイラの作成方法

C言語初心者のため、稚拙な文章になる可能性があることを最初にお詫びします。

現在Microsoft社のMicrosoft Visual C++ 6.0を用いてCドライブのルートにある「temp.c」というソースファイルをコンパイルするアプリケーションを作ろうと思っているのですが、ネット上で「C言語 コンパイラ 作成」等と検索しても、既にコンパイラがあることを前提としたホームページしか見つけることができず、肝心のコンパイラをどのように作ったらよいのかということが載ったホームページが見つかりません。

というわけで、今回はコンパイラをどのように作ったらよいのかというヒントだけでもいいので教えて頂けないかと思い投稿させて頂きました。
ちなみに「temp.c」はそこまで複雑なソースではなく、DOS上のアプリで、リソースやアイコンなどは用いないものです。


そもそも「コンパイラを作る」ということ自体が愚かな行為なのかと思ったりもします。
私が所持しているBcpadやMicrosoft Visual C++ 6.0に付属している既存のコンパイラを利用するということも考えたのですが、BcpadやMicrosoft Visual C++ 6.0の本体以外からコンパイラをどのように利用していいのかもわかりません。

どうぞ忌憚の無い意見をよろしくお願いします。
ちなみにOSはXPのSP3です。

C言語初心者のため、稚拙な文章になる可能性があることを最初にお詫びします。

現在Microsoft社のMicrosoft Visual C++ 6.0を用いてCドライブのルートにある「temp.c」というソースファイルをコンパイルするアプリケーションを作ろうと思っているのですが、ネット上で「C言語 コンパイラ 作成」等と検索しても、既にコンパイラがあることを前提としたホームページしか見つけることができず、肝心のコンパイラをどのように作ったらよいのかということが載ったホームページが見つかりません。

というわけで、...続きを読む

Aベストアンサー

あの・・・水を差すようで恐縮しますが

それって「コンパイラを作る」ではなくて
「コンパイラを呼び出す」だけでは?

ボタンを押したら
外部プログラムとして cc コマンドを実行するだけ…。
最近 C++ やってないんで忘れましたが WinExecとか CreateProcess とか使って…。もちろん環境変数や実行パラメータはきちんとセットした上でですけど…。Microsoft Visual C++ 6.0でもコマンドプロンプトだけでコンパイルできますから。

QC/C++インタプリタ CINTをVC++2005でビルドする方法

cint-5.16.19をVC++ 2005でビルドしたいのですが、うまくいきません。

以下の手順で試しました。
1)cint-5.16.19-source.tar.gzをDL&解凍
2)cygwin(bash)を立ち上げてcint-5.16.19のMakefileのあるフォルダに移動
3)./configure msvc8を実行
4)make staticを実行

そうすると、
make[1]: *** [Api.obj] Error 53
が発生します。

VCのcl.exeのあるフォルダにパスは通っています。

Error 53の原因はmspdb80.dllが見つからないからの様でした。
(この時点で何か怪しいですが・・・)

そこで、cl.exeのあるフォルダに
C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\mspdb80.dll
から持ってきたmspdb80.dllをコピーしました。

その後、make staticを実行したところ、コンパイルは行われるようになりましたが、

c:\cint-5.16.19\inc\G__ci.h(473) : fatal error C1083: include ファイルを開けません。'math.h': No such file or directory
make[1]: *** [Api.obj] Error 2

というエラーが出て止まってしまいます。

どこが間違っているでしょうか?
ご存知の方、ご教授お願いいたします。

CINT:
http://root.cern.ch/twiki/bin/view/ROOT/CINT

cint-5.16.19をVC++ 2005でビルドしたいのですが、うまくいきません。

以下の手順で試しました。
1)cint-5.16.19-source.tar.gzをDL&解凍
2)cygwin(bash)を立ち上げてcint-5.16.19のMakefileのあるフォルダに移動
3)./configure msvc8を実行
4)make staticを実行

そうすると、
make[1]: *** [Api.obj] Error 53
が発生します。

VCのcl.exeのあるフォルダにパスは通っています。

Error 53の原因はmspdb80.dllが見つからないからの様でした。
(この時点で何か怪しいですが・・・)

そこで、cl...続きを読む

Aベストアンサー

スタートメニューの「Visual Studio 2005 コマンド プロンプト」から起動したコマンドプロンプトからmakeしてください
LIBやINCLUDEなどの環境変数が正しく設定されます

わけもわからずmspdb80.dllをコピーするとかはやめた方が良いです

QC言語のコンパイラ

C言語の勉強がしたいと思っているのですが、コンパイラっていうんですかね、それについて少し調べてみたら
無料なら"Borland C++ Compiler"で、有料ならなんかかなり高いっぽいけど"Visual C++"っていうのがあることが解りました。

よくプログラミング系のサイトの人で"Borland C++"のコンパイラを利用してとてもプログラミングがしやすくなったということが書いてあるのですが、"Visual C++"と比べたらどっちの方がいいんですか?(やっぱり有料の方?)
もし人それぞれなら、みなさんは両方あったらどっちを使いますか?

初心者なら無料ので十分すぎるのだとは思いますが、プログラマーみたいな人から見るとどうなのかな~と思ったので教えていただけますか。
お願いします。
ついでに"Visual C++"って言語があるんですかね?何かそんな風に書いてあるところもあったもんで。
かさねがさねお願いします。

Aベストアンサー

Borland C++ Compilerは元々は有料ですよ。(パッケージ販売していた。)

統合環境など(IDE)を省いて無料として公開したものなのでなんら、無料だからといって劣る部分はありません。
(コンパイル速度もBC++の方が速いし。)

VC++がいいと言われている利点はMS社製なのでOSと同じ会社と言うことで親和性が高い、サンプルソースコード等の資料がボーランド用に比べて極端に多いという利点があります。

勿論、VC++用のソースコードでもBC++とVC++の違いを理解していれば、コンパイル可能です。(ライブラリ関係の呼び出し方が違うのでDLLをBC++用にインポートするなど)

個人的な意見ですが、純粋にプログラムを学びたいというのであればBC++で十分です。(もったいないくらい、昔は5,6万位だして買った記憶が、、、。)

本格的にWindowsのプログラムを学びたいのならVC++の購入を検討してみるべきです。(逆に、それくらいの金額を自分に投資できないならたとえVC++が無料であっても使いこなさないと思います。)

Borland C++ Compilerは元々は有料ですよ。(パッケージ販売していた。)

統合環境など(IDE)を省いて無料として公開したものなのでなんら、無料だからといって劣る部分はありません。
(コンパイル速度もBC++の方が速いし。)

VC++がいいと言われている利点はMS社製なのでOSと同じ会社と言うことで親和性が高い、サンプルソースコード等の資料がボーランド用に比べて極端に多いという利点があります。

勿論、VC++用のソースコードでもBC++とVC++の違いを理解していれば、コンパイル可能です。(ライブ...続きを読む

QC++/CLIで、アンマネージC++のDLLを使用する方法

こんにちは。
C++/CLIのプログラムで、アンマネージC++のDLLを使用したいと考えています。
ネット上をいろいろ調べたのですが、具体的な手段がわかりません。
見よう見まねで以下のようにサンプルを作成したのですが、コンパイルすら通る状況になりません。
かなり基本的な問題がありそうで申し訳ないのですが、下記の問題点を教えていただけないでしょうか。

また、参考になりそうなサイトなどありましたら教えていただけると大変助かります。

■アンマネージC++のDLL
VC++6.0で、以下のように、単にデバッグ文字列を書き出すだけのDLL関数を作成しました。
(このDLLが使用できることは他のVC++6.0プロジェクトで確認済みです)
/*-----Func.h-----*/
#ifndef __FUNC_H__
#define __FUNC_H__

AFX_EXT_CLASS void WINAPI ShowMessage();

#endif//__FUNC_H__

/*-----Func.cpp-----*/
#include "StdAfx.h"
#include "Func.h"
#include <stdio.h>

void WINAPI ShowMessage()
{
CString str = "This is The Message from DLL Func!\n";
OutputDebugString(str);
}

■C++/CLI でのDLL使用
Visual Studio2008にて、C++のCLRプロジェクトを作成して、以下のようにDLLを使用する準備を行いました。
1.ソリューションエクスプローラのヘッダフォルダに、Func.hを追加
2.プロジェクトのフォルダに、上記で作成したFuncのDLLとLIBファイルを置く。
3.プロジェクトの「プロパティ > C/C++ > プリプロセッサ > プリプロセッサの定義」に、"_AFXDLL"を追加
4.mainクラスのソースに以下を記述
/*----------*/
using namespace System;
#include "Func.h"
#using "ManagedDllApp.dll"

int main()
{
ShowMessage();
return 0;
}
/*----------*/

この状態でコンパイルすると、
「エラー3error C2144: 構文エラー : 'void' は ';' によって先行されなければなりません。d:\xxx\Func.h4Console
」等、Func.h周りで複数のエラーが出ます。
また、Func.hをインポートしないでコンパイルすると、
「エラー3fatal error C1113: #using が 'd:\xxx\manageddllapp.dll' で失敗しました。」と、Dllでエラーが出ます。

よろしくお願いいたします。

こんにちは。
C++/CLIのプログラムで、アンマネージC++のDLLを使用したいと考えています。
ネット上をいろいろ調べたのですが、具体的な手段がわかりません。
見よう見まねで以下のようにサンプルを作成したのですが、コンパイルすら通る状況になりません。
かなり基本的な問題がありそうで申し訳ないのですが、下記の問題点を教えていただけないでしょうか。

また、参考になりそうなサイトなどありましたら教えていただけると大変助かります。

■アンマネージC++のDLL
VC++6.0で、以下のように、単にデ...続きを読む

Aベストアンサー

 こんばんは。御礼頂きました。
 Func.hの中にインクルードし忘れがある様です。準備が出来たら、必ず「ソリューションのリビルド」をして下さい。
 以下は DLL->VC6.0Pro CLR->VC2005Pro で確認しています。

/*-----Func.h-----*/
#ifndef __FUNC_H__
#define __FUNC_H__

#include"afxver_.h"//此れと
#include"afxv_dll.h"//此れと
#include<windows.h>//此れをインクルード

AFX_EXT_CLASS void WINAPI ShowMessage();

#endif //__FUNC_H__

//以下はCLRアプリ側

/*-----stdafx.h-----*/
// stdafx.h : 標準のシステム インクルード ファイルのインクルード ファイル、または
// 参照回数が多く、かつあまり変更されない、プロジェクト専用のインクルード ファイル
// を記述します。
//
#pragma once

// TODO: プログラムに必要な追加ヘッダーをここで参照してください。
#include"func.h"
#pragma comment(lib, "libの名前.lib")

/*-----clrconsole.cpp-----*/
// clrconsole.cpp : メイン プロジェクト ファイルです。

#include "stdafx.h"

using namespace System;

int main(array<System::String ^> ^args)
{
::ShowMessage();
return 0;
}

 こんばんは。御礼頂きました。
 Func.hの中にインクルードし忘れがある様です。準備が出来たら、必ず「ソリューションのリビルド」をして下さい。
 以下は DLL->VC6.0Pro CLR->VC2005Pro で確認しています。

/*-----Func.h-----*/
#ifndef __FUNC_H__
#define __FUNC_H__

#include"afxver_.h"//此れと
#include"afxv_dll.h"//此れと
#include<windows.h>//此れをインクルード

AFX_EXT_CLASS void WINAPI ShowMessage();

#endif //__FUNC_H__

//以下はCLRアプリ側

/*-----stdafx.h-...続きを読む

QMacで使えるC言語のコンパイラを教えてください

最近C言語の勉強を始めました。
私はMacユーザなのですがMacでCを使えるコンパイラはあるのでしょうか。ネットで探しても見つかりませんでした。もしご存じでしたら教えてください。

Aベストアンサー

MacでC言語の勉強をフリーの処理系で楽しむならMacintosh Programer's Workshopが良いと思います。
PowerPC用のC/C++コンパイラ、MC68K用のC/C++コンパイラ、MC68Kのデバイスドライバ開発などに使えるアセンブラとMacプログラミング(Toolboxプログラミング)に必要なResEditなどのツールが全てそろっています。
http://developer.apple.com/tools/mpw-tools/

hohihohiさんご紹介のCodeWarriorも良いのですが、いかんせん高価なのでDiscover Programming for Macintosh日本語版リリース5(¥2、8000)程度で始められても良いかもしれません。
勉強に必要な入門書などがセットになっています。
ただし、2次生産物(作成したソフトウェア)の配布権などに制限がありますので実力がついたらCodeWarriorにアップグレード(¥4、1000)すると良いでしょう。
http://www.metrowerks.co.jp/Products/Discover/Discover_Mac5.htm

日本語による1年間のテクニカルサポートに¥2、8000をかけると思えば安いと思います。

MacでC言語の勉強をフリーの処理系で楽しむならMacintosh Programer's Workshopが良いと思います。
PowerPC用のC/C++コンパイラ、MC68K用のC/C++コンパイラ、MC68Kのデバイスドライバ開発などに使えるアセンブラとMacプログラミング(Toolboxプログラミング)に必要なResEditなどのツールが全てそろっています。
http://developer.apple.com/tools/mpw-tools/

hohihohiさんご紹介のCodeWarriorも良いのですが、いかんせん高価なのでDiscover Programming for Macintosh日本語版リリース5(¥2、8000)程...続きを読む

Q【VC++】MFC、C++/CLI(CLR)、C#の違い、及び、これからの展望

いつも大変お世話になっています。
VC++初心者です。

VC++6.0(MFC)、VC++2005(CLR)(C++/CLI)(Express Edition)を
同時期に使い始めて何ヶ月か経ちました。
現在では、CLIの方が圧倒的に開発スピードが早く(扱いやすい)、
逆に、MFCの開発スピードが遅く(扱いにくい)、イライラしっぱなしです。
(CLIの開発では、WEBにあるC#のコードを参考にしながら、
 コーディングしています。)

そこで、何点か疑問に思ったので、ご回答頂けませんでしょうか。
(1)CLIとC#を区別した理由は何なのでしょうか。
(2)MFCはこれからも使われるのでしょうか。
 (MFCで新規開発をすることは、まだまだ大勢なのでしょうか。)
(3)VC++2005以降、MFCは有償らしいのですが、
 VC++6.0(MFC)とVC++2005(MFC)は何か変わったのでしょうか。
 (コーディングしやすくなっていますか?)
(4)個人差はあると思いますが、開発スピードが一番早いのは、
 CLR、C#、MFCのどれでしょうか。
 
すぐに返信ができないと思いますが、
宜しければ、ご回答頂けると幸いです。

いつも大変お世話になっています。
VC++初心者です。

VC++6.0(MFC)、VC++2005(CLR)(C++/CLI)(Express Edition)を
同時期に使い始めて何ヶ月か経ちました。
現在では、CLIの方が圧倒的に開発スピードが早く(扱いやすい)、
逆に、MFCの開発スピードが遅く(扱いにくい)、イライラしっぱなしです。
(CLIの開発では、WEBにあるC#のコードを参考にしながら、
 コーディングしています。)

そこで、何点か疑問に思ったので、ご回答頂けませんでしょうか。
(1)CLIとC#を区別した理由は何なのでしょうか...続きを読む

Aベストアンサー

私も私見ですが。

> (1)CLIとC#を区別した理由は何なのでしょうか。
CLIはC++的だが、C#はJava系の文法。近いけど遠い。
要するに慣れ親しんだC++を使いたい人向け。

> (2)MFCはこれからも使われるのでしょうか。
市販ソフトメーカーなど企業で資産のあるところは使っていくでしょうね。シェア・フリーソフトの作家でもそうですが。
C#とCLIは、インストール時に.net frameworkのインストールがあるから嫌われている所があるんじゃないでしょうか。.net系のソフトですよってばれますし。逆コンパイルがネイティブより容易ってのがライセンス認証しているメーカーとかシェアウェア作者さんには気になるポイントでしょう。一応難読化ツールもありますが。

> (4)個人差はあると思いますが、開発スピードが一番早いのは、
> C++/CLI、C#、C++とMFCのどれでしょうか。
C#かなぁ。
まぁ、面倒なソフトになったらどれでもさほど変わり無い気がしますね。ただ、.NET系はガベージコレクションがうれしいですが。

私も私見ですが。

> (1)CLIとC#を区別した理由は何なのでしょうか。
CLIはC++的だが、C#はJava系の文法。近いけど遠い。
要するに慣れ親しんだC++を使いたい人向け。

> (2)MFCはこれからも使われるのでしょうか。
市販ソフトメーカーなど企業で資産のあるところは使っていくでしょうね。シェア・フリーソフトの作家でもそうですが。
C#とCLIは、インストール時に.net frameworkのインストールがあるから嫌われている所があるんじゃないでしょうか。.net系のソフトですよってばれますし。逆コンパイルが...続きを読む


人気Q&Aランキング