• 締切済み

C言語とFortranで記された補間関数から、VB6で使用可能なDLLの作成について御教授願います。

 Scilabのcshep2d、eval_cshep2d関数(3次元のshepard補間関数)に相当する機能、即ち、複数の(x,y,z)の値が記されたn x 3の行列ファイルを読み込み、ある特定の格子点上にない離散的な(x,y,z)から3次元曲面z=F(x,y)を推定し、任意の(x,y)におけるzの値を返す機能、をDLL化してVB6で使用したいと考えています。  WinのCやFortranのコンパイラは高価故、Linuxのgccやgfortranを用い、Scilabの補間モジュールのソースからVB6で使用可能なDLLの作成を考えていますが、その方法を順を追って御教授願います。  支出不要の他の方法で上記の機能が実現出来るのであればScilabに限定はしておりません。以下は参考リンクです。何卒宜しくお願い致します。  cshep2d関数 http://www.scilab.org/product/man/cshep2d.html  Scilabソース http://www.scilab.org/download/5.1.1/scilab-5.1.1-src.tar.gz

みんなの回答

回答No.4

 質問を投稿した、HopeAceAnsです。  禁止事項ガイドラインの「【その他迷惑行為】■マルチアカウントによ る自作自演投稿」にやや抵触するかもしれませんが、質問者自身で何とか 解決できそうな場合で、コメントを記しながらの質問の締め切り方が分か りませんでしたので、敢えて、もう一つFindAceAnsというアカウントを作 成して回答しております。  質問に記したScilabソースの中で私が必要としているのは結局のところ /scilab-5.1.1/interpolation/src/fortran/cshep2d.f のみと分かりました。cshep2d関数の数学的な話に関してはこのソース内に 詳細が書かれておりますし、またこのソースファイルからVB6で利用するま での道筋についてはなんとか自分で開拓できそうです。それ故、この質問 を締め切ることに致しました。  ご回答をして下さったlv4u様、necomimi様どうもありがとう御座いまし た。また機会がございましたらご助言いただけると幸いでございます。

HopeAceAns
質問者

お礼

 質問を投稿した、HopeAceAnsです。  この質問を読んでいる皆様に対して、回答者に対するお礼がコメントとし てホームページ上に記されることを知らず、FindAceAnsというアカウントを 新たに作って上記のようなコメントをしてしまったことをお詫び致します。  

すると、全ての回答が全文表示されます。
  • necomimi
  • ベストアンサー率41% (633/1540)
回答No.3

Windowsコンパイル条件がそう指定されてるってことは その辺のライブラリが必要なんでしょうね。 圧縮ソースで50MB以上ってことは20万行を超えてませんかね!? さすがに書き換えは… お力にはなれそうにないですね orz

HopeAceAns
質問者

お礼

 質問を投稿した、HopeAceAnsです。  質問に記したScilabソースの中で私が必要としているのは結局のところ /scilab-5.1.1/interpolation/src/fortran/cshep2d.f のみと分かりました。cshep2d関数の数学的な話に関してはこのソース内に 詳細が書かれておりますし、またこのソースファイルからVB6で利用するま での道筋についてはなんとか自分で開拓できそうです。それ故、この質問 を締め切ることに致しました。  ご回答をして下さったnecomimi様どうもありがとう御座いました。 また機会がございましたらご助言いただけると幸いでございます。

HopeAceAns
質問者

補足

早速のご回答有り難う御座います。 補間関数のモジュール部分は、非圧縮で702.6 KB(計147アイテム)で、 /scilab-5.1.1/modules/interpolation/ コアとなる補間関数のソースは、非圧縮で239.8 KB(計23アイテム)です。 /scilab-5.1.1/modules/interpolation/src/ 折角のご回答に質問でお返事をしてしまい申し訳御座いませんが、逆に、 VS2008の90日評価版などを導入すればDLLの作成が出来て、晴れてVB6で cshep2d、eval_cshep2d関数が使用出来るようになりますでしょうか?

すると、全ての回答が全文表示されます。
  • necomimi
  • ベストアンサー率41% (633/1540)
回答No.2

C言語やFortranで作るのはいいとしても Linux上でコンパイル、リンクするんですよね? 共有できるリソースが違うから それをWinに持ってきても動かないと思うけど…

HopeAceAns
質問者

補足

 参考意見有り難うございます。  DLLの最終的な機能としては、x,yの二つの値を受け取り、適当な計算の 後、zという値を出す、というものを考えて居りましたが、その過程はOSの 依存が避けられない程複雑なものとなってしまうのでしょうか。。。  scilab-5.1.1-src.tar.gz\Readme_Visual.txtによりますと、Scilab全体 をWindowsでコンパイルする場合は、   * Visual Studio C++ .NET 2008 Pro   * Intel Fortran 10.1.020 (or more)   or   * Visual Studio C++ .NET 2008 Express が必要とあります。当方のWindows環境は、VisualStudio6です。モジュー ルのみの利用の場合、ソースやvcprojファイル、その他のファイルを書き 換えるなどして対応出来ないか模索しましたが、挫折しました。  もし、VS6に対応した書き換え等が対応出来そうでしたら、それについて 御教示頂けると幸いです。

すると、全ての回答が全文表示されます。
  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

>>WinのCやFortranのコンパイラは高価故、Linuxのgccやgfortranを用い、Scilabの補間モジュールのソースからVB6で使用可能なDLLの作成を考えていますが、その方法を順を追って御教授願います。 それは、できないと思います。なんでそれが可能と思えたのですか?なにかの本やサイトに可能だと載っていたのでしょうか?

HopeAceAns
質問者

お礼

 質問を投稿した、HopeAceAnsです。  質問に記したScilabソースの中で私が必要としているのは結局のところ /scilab-5.1.1/interpolation/src/fortran/cshep2d.f のみと分かりました。cshep2d関数の数学的な話に関してはこのソース内に 詳細が書かれておりますし、またこのソースファイルからVB6で利用するま での道筋についてはなんとか自分で開拓できそうです。それ故、この質問 を締め切ることに致しました。  ご回答をして下さったlv4u様、どうもありがとう御座いました。 また機会がございましたらご助言いただけると幸いでございます。

HopeAceAns
質問者

補足

 早速のお返事有り難うございます。こんなにも早くお返事を頂けるもの とは思ってもいませんでしたので、幾分驚いて居ります。  さて、ご質問の件ですが、下記サイトに、gfortranは現在DLLEXPORT等の 機能はサポートしてないが、DLLをビルドするための強力なアプローチがあ る、との記述があります。 http://gcc.gnu.org/ml/fortran/2009-06/msg00199.html  また、gfortran使用上の問題を幾らか抱えつつもDLLを作ったとの報告も 幾らかあるようです。 http://gcc.gnu.org/ml/fortran/2005-04/msg00401.html http://gcc.gnu.org/ml/fortran/2009-01/msg00164.html http://www34.atwiki.jp/yonetti/pages/15.html  Scilabはソースが公開されている上Linuxでも動作可能であり、上記の方 法と組み合わせることで、DLLを作成してVB6に組み込めるのではないかと 考えました。  当方では最終的に、Scilabのcshep2d、eval_cshep2d関数に「相当する」 機能のVB6での実現、を目指しております故、もしそれが可能な他の方法が あれば、それでも問題はありません。

すると、全ての回答が全文表示されます。