• ベストアンサー

VCとWin32APIの使用について?

Delphiを使用しているのですが、私は、システムに直結してそうなので、あまり使いたくないのですが、ゴミ箱移動やWin32APIを使うこともあります。 こういった事を調べていたの時、少し見たのですが、VC++?では、Win32APIは、ためらってしまう?という、意見をみました。 その時は、スルーしたのですが、何か理由があるのでしょうか? (VC++じゃなく、VBだったかもしれません。 今もちらちらと、調べてみましたが、見つけることができなくって。 もしかしたら、Delphi信者の方なのかもしれませんが、なにか理由があるのかな?と思いまして。 どう考えても、Win32APIと、マイクロソフトの言語が、相性が悪い訳がある訳ないだろうし。 よろしくお願いします。

noname#58606
noname#58606

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

理由があるとしたら、移植性が悪くなるということでしょうか。 当然UNIX系のOSでWin32APIが含まれるコードのコンパイルは通りません。 (もちろんレイヤーをわけるなりラップするなりで工夫すれば問題ありません。)

noname#58606
質問者

お礼

あー、なるほど。 Winで固めてしまうと・・・、ということですか。 使ったことはありませんが、Delphiは、 Linux向けのKylixがあるみたいですからねー。 メモリーとか、使うのが面倒とか、あるのかな?と思っていたのですが。 ありがとうございます。

その他の回答 (1)

  • POTATO_XP
  • ベストアンサー率10% (24/230)
回答No.2

VC++にもWin32プロジェクトはあります。ガシガシつかってますが・・・。 多分、MFCプロジェクト内で使用する場合、MFCの構成をきちんと把握しないまま APIを無闇に使うのは危険なのではという意味なのではないでしょうか? 移植性で言うなら、MFCよりAPIとして使える方が自由度があります。Linuxに 移植したければ、Win32のAPIと類似したシステムコールをうまくラップ出来る様 にデザインされたライブラリを作りその上にアプリを構築するのが一般だと思い ます。ただ、それをすると、Windows固有、Linux固有の持ち味を潰す事になる場 合もあるので、移植性確保は多機能性をトレードオフにしてしまい、常にそれを 意識する事が正しいかは一概に言えません。御参考まで。

noname#58606
質問者

お礼

Win32APIと構造体は、切り離すことができないですからねー。 私も、フォルダごとの移動やゴミ箱に入れるのとかかは、便利ですから、使ってしまいますが。 それでも、できるだけ、理解した上で、2,3のHPを参考にします。 ということは、やはり、Delphi信者の方だった、って可能性も出てきそうですね。 もちろん、Win、Linuxの両方でコンパイルができるソースに、意味がないとは言いませんが、私はLinuxを2年くらい起動さえさせてませんので。^^; 回答、ありがとうございます。

関連するQ&A

  • VC++でwin32APIを作っているのですが・・・

    こんにちは。私はwin32APIを勉強しているc言語初心者です。 私はMicrosoft Visual C++ 2008を使ってc言語のwin32APIをプログラミングしているのですが、独学でやっているので物凄く邪道なwin32APIプログラミングをしているような気がするのです。 ・c言語のプログラムを書いて、C++のwin32APIプロジェクトとしてビルドする。 ・ヘッダーファイルにwin32API関数がなかったので、自分のwindowOSからwin32API関数を探し出してVC++2008のなかのincludeフォルダ内にコピー&ペーストして使えるようにした。 これって邪道ですか?一応何の問題もなくwin32APIプログラムが作れるのですが、もっと正規なやり方があるでしょうか。回答よろしくお願いします。

  • VBでWin32APIを使う方法

    VB2010を触っていて、Webで情報を拾いながらコードを作成しています。 .NetFrameWorkではクラスで対応できない時にWin32APIを使うとありました。 この記述はVB2005の時のもので、やや旧いです。 VBの版が進むと使えるクラスも多くなって、APIの出番はますますなくなっているのでしょうか? 取り敢えず現在使いたいAPIはVB6からのコピーでSHGetSpecialFolderLocationと GetSystemDirectoryの2つです。これはクラスで代用可能ですか。 それともAPIでやるべきなのでしょうか。 現在APIで記述しています。リビルドでパラメータのエラーが出て止まっています。 ちょっと手探り状態で作業を進めているため、的が外れていたら済みません。 ソースは以下のようになっています。   ws = GetSystemDirectory(sysDir, MAX_PATH)   GetSystemDir = Left$(sysDir, InStr(sysDir, vbNullChar) - 1)

  • Softの情報取得 APIについて

    お願いします。 急いでいるので、文面等問題ありましたら、申し訳ございません。 早速ですが、PC内のインストールされているソフト情報を取得したいのですが、API等で取得可能でしょうか?(ソフト名等) APIの関数を教えていただきたいです。また、関連するホームページ等もあればおしえてくださいませ。 作成する言語 出来れば、VB またはVC++ 大変申し訳ありません。よろしくお願いします。

  • Win32apiはC言語で使うことを前提の部品??

    Win32apiをJavaやRuby、PHP、VBSなどで利用する場合には 参照するなどの書き方は、その言語の書き方(文法)でそれぞれ記述するわけですか? 同じ部品なのでどの言語でも同じ書き方で書けるわけではないですよね? バカバカしい質問ですみません。

  • Delphiで、出来にくい事って。(欠点

    Delphiしか経験がないのですが、私はDelphiの開発効率は、けっこう上だと思っています。 VBと迷ったんですが、選んでよかった。 過去のサンプルが多く、基本Win上で動く事、ネイティブコンパイルな事。 究極的にはOSも作れるはず。 Win32APIが、使いやすいこと。 はいはい、「そんなのはどの言語でも、似たような物だよ!!」とあおっておいて、Delphiで出来にくい技術?手法?アプリ?ってありますか? 個人的には、ゲーム系を作ったことがないので、作ってみたいかなー、と。 スレッドやオブジェクト指向もサポートしてるから、いけるとは思うのですが。 サイズが大きくなるのは、Delphiの欠点ですねー。 あとは、配列がちょそいのが、ちょっと欠点かなー。 Perlから、プログラムを始めたもので。^^; 他にも、Delphiの欠点があれば、教えてくださいな。

  • VC++ExpressとSQLでの使用方法

    漠然とした内容で申し訳ないのですが、 チャリンコ乗れるからナナハン乗れるだろうといっているようなものかもしれませんが、 printf使えるからポインタもばっちりといっているようなものかもしれませんが、 そこをあえて。 C言語とC++を3ヶ月勉強しました。 (ボーランドのコンパイラを使ったコマンドラインのみ) その昔、vbスクリプトでSQLでアクセスのMDBからWEBへ表示させる 簡単なプログラムを作ったことがあります。 去年あたりVB2008あたりで簡単な計算でプログラムなどをつくりました。 このたびわけあって今後はCの系統でやっていこうと思っています。 (純粋なプログラマーをめざしているわけではないし、私には無理なので) で、今回VC++でSQLで売り上げ管理もどきを練習を兼ねて作ろうと思っています。 ですが、とっかかりというか道筋がほしいのです。 1.上記経験からアクセスに相当するデーターベースが必要と思うのですが   何を使えばよいのでしょうか。 2.VC++ExpressとSQLserverExpressは繋がりますか? 3.VC++ExpressとMySQLはどうでしょうか? 4.2と3どちらで行ったほうがよいでしょうか? 5.VC++はVBのようにイベントドリブンで使えるのでしょうか? 6.よい参考書やサンプルがあれば教えてください。 漠然としていますがとっかかりがほしいのです。

  • delphi等で作ったものをCDやDVDに写す方法教えてください。

    delphi等で作ったものをCDやDVDに写す方法教えてください。 又、C言語、java、c++、vc++、php、vb、vba・・・などプログラミング言語で作ったものはどうやってCDやDVDに写せばいいか。 また、どの言語がそのようなソフトを開発できるのか教えてください。 C言語とdelphiをやっているのですが、正直C言語はソフトをなかなか開発できるところまでいかないので、つまらないと思ってしまっています。それに対してdelphiはすぐにソフトを開発できるため、とても面白く感じています。それでそのソフトをCDやDVDに写したいと思いました。

  • C#とVC++.NETについて教えて下さい。

    質問タイトルが漠然としててごめんなさい。 特別なソフトを作る訳ではないのですが、暇プロレベルで最近やっと 苦労の末、.NET以前のVC++を理解できて、VC++ってMFC を使う為の言語のだなーと思っている感じです。 C#は購入済みですが、まだ触ってません。VC++.NETは未購入 の状態です。 そこで質問なのですが、  (1)WIN32アプリにはC#とVC++.NETどちらが適していますか?  (2)VC++.NETはやはりMFC寄りの言語なのでしょうか? インラインアセンブルとかもやりたいのですが、  (3)VC++.NETではできますか?C#では? C#は見た目がC言語でクラスも使えるのでVC++.NETとどう違う のか良くわかりません。自分的にはC言語でなんでもやって行って、 C++はクラスが分かる程度で良しとしようと思っています。 詳しい方、漠然とした質問で申し訳ございませんが、ご教授お願いします。

  • XPの頃のWin32APIの本などはまだ役に立つ?

    1999年頃学生でC言語を勉強し平行してC言語だとWindowプログラムが 作るのが大変だったことからVBも少しやりました。 頭が悪かったもので、その後、VC++6.0を使いWindowsプログラミングを 作る以前の段階で挫折し勉強の難しさに悶絶し病んで廃人となりニートをやっていました。 その後、なんとなくプログラミングに未練があり、Windows APIの本を買ったり JAVAの本を読んだりHTMLやVBS、CSSなどを勉強してみたりしましたが 途中でいつも投げ出して中途半端でした。 そして再び、最近、プログラミングの本を読む機会があり、 知り合いの友人に感化されたこともあり、 Rubyを勉強し始めたのですが、 Win32 API? RubyでWindowsプログラミングを作ることに特化した本が200円で売っていたので 2007年の本でしたが購入してみました。 Win32OLEについて解説してありました。 Rubyに関する知識がまだあやふやな部分があり、またCOMやAPIに関する知識も ???なのであまり理解できませんでしたが、 なんとなく雰囲気のさわりのさわりぐらい分かりました。 とりあえず、昔は頭が悪く非常に精神的にも混乱していて よくわからずなんでも取り組もうとしてしまいました。 WEBページなどの処理をするにはHTMLのほかにDOM、CSSなどの知識 Java scriptなどの知識であっているでしょうか? ruby php phython perl などいろいろあるがこれは特性をみて自分がやりたい言葉のようなものなので 母国語を一つマスターすべきということは理解しました。 また、Windowsプログラミングを作るのであれば、 APIやCOMなどの知識があればいいのでしょうか? FLASHやActiveXのように現在お目にかからない仕様もあるのですが、 これらも内包していまでも学ぶ価値はあるのでしょうか? 出来ればでいいのですが、 安く仕入れられるプログラミング書籍でも活用が可能な技術を 教えてください。 教えてくださいと言ってもC言語を覚えればOSだって作れるよとか アセンブラ覚えれば完璧ですとかそういうのは無しで 一般的なバカなおじさんがなんとなプログラミングを作るうえで知っていた方がいい 知識や導入方法、パーツなどを教えてくださいよろしくお願いします。 一応、今、RubyとVBS、CSS,HTMLを勉強しています。 DOMの知識はあまりないです?説明してみろといわれてもあやふやな答えしかできません よろしくお願いします。

  • Excel VBA で Win32API CreateFileA などの String型引数は、なぜ ByVal?

    Excel VBA から Win32API を実行する場合の、String型引数に関する質問です。 【背景】 Win32API の CreateFileA,MoveFileA,DeleteFileA など、関数名最後が "A" となている関数の String型引数は、全て Declare文で ByVal と宣言しないと上手く動作しません。 しかし VisualC++ のヘッダファイルでこれらの "A" 付き API の宣言を見てみると、文字列型の引数は全てアドレス渡しとして宣言されています。BVA での上記の宣言と矛盾しており、ByVal で上手く動作するのが不思議でなりません。 また VC++ で自分で作成した DLL関数の文字列型引数の場合は、BVA のDeclare文で ByRef と宣言しなければ上手く動作しません。これは上記の VC++ ヘッダファイルの API関数の宣言と辻褄が合っており、やはり、Declare文で "A"付き APIの場合に ByVal としなければならない事が矛盾しているとしか思えません。 【質問】 いったいこれは、どうなっているのでしょうか?? この場合("A" 付き API の場合)、どうして ByRef でちゃんと動くのでしょうか? また String型の場合 ByRef では効率が悪いと思うのですが、なぜ ByRef が採用されているのでしょうか? サルにでも分かるように説明して頂ければ幸いです。 【私の知識レベル】 C++ ではなく C言語 においては、アセンブラレベルでのコード及び動作を理解しております。 オブジェクト,クラス,メソッドなどの用語は一応理解しているつもりですが、C++ ならではのオブジェクティブな言語仕様は理解していません。 へんな質問かも知れませんが、よろしくお願いします。

専門家に質問してみよう