HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
1109
TYC言語とHSPの情報のやり取り19未解決


TY

リンク

2009/11/9(Mon) 09:52:13|NO.28784

C言語の基礎が一応わかる程度、グラフィックは未経験でHSPを始めたばかりの者です。

人対PCのボードゲームの思考エンジンをC言語で作りました。
人がある手を打つとC言語で作った数MBのデータファイルをアクセスして
PCが対応する手を打ってくるものです。(完全解析してありますので
その局面に応じた手はすぐに拾い出せますし情報のやり取りは数バイトですみます)

そのグラフィックを作る際、DXライブラリという手もあったのでしょうが
敷居の低いHSPでまず試しましたが、初心者ながらなんとか盤や駒の動きを
表現するところまではできました。
現在最大の問題はHSPから人が打った手をどうPCに伝えPCが次に指す手をどう受け取るかです

間接的に
HSPからexecでC言語のプログラムを開く
HSP側から人が打った手をpoke/lpokeで小さなファイルに書き込む
C言語側でそれをfgetcで読み込みそれから数MBのファイルをアクセスし次の手を決め
fputで書き込みpeek/lpeekで読み込んでからそれに応じてグラフィックを動かす

ということで一応可能らしいところまで2ちゃんねるでお聞きしてわかりましたが
C言語のプログラムを同時に開く場合そちらのコンソールウィンドウは非表示にすることができるのか
またC言語のプログラムをどう閉じるのかなどがわかりません
教えていただければ幸いです

あるいはもっと別の楽な方法は可能でしょうか?
例えばHSPから数MBのファイルに直接アクセスして○○番目のバイトの数字を取得してくる
みたいなことができればいいかなと思っています。
(大きいファイルなのでできるかどうかもわからないのですが)

基本的な方針を決める段階なので後半はあいまいな質問ですみませんが
できるだけ敷居の低い良い方法を教えてくださると助かります



この記事に返信する


vex

リンク

2009/11/9(Mon) 14:31:01|NO.28786

C言語の基礎を覚えたくらいではアプリケーション同士が相互にやりとりするプログラムは組めません。

C言語で作ったプログラムとHSPで作ったプログラムの情報のやりとりを問題視されているようですが、
C言語で作ったプログラム同士の情報のやり取りは出来るのですか?
グラフィックライブラリうんぬん選ぶ前にそこが問題になるのではないですか?

プログラムを言語レベルで考えている点でどのような方法もあなたには敷居が高いように思われます。

そもそもC言語のプログラムを消す方法などはHSPの問題ではありません。



f(出港前)

リンク

2009/11/9(Mon) 14:43:17|NO.28787

c側をDLLにするのが一番手っ取り早いんでね。
敷居云々は置いといて。



珠後

リンク

2009/11/9(Mon) 17:30:24|NO.28790

C側をDLL化するか、SendMessageA/Wで通信するか、共有メモリを使うかになると思います。

ただ、ファイルを逐一書き込んで通信する方法は、
ドライブの反応速度によって同期不良が起きたり、
HDDの場合はディスク自体の寿命を縮めるので避けるべきと考えます。

後者2つはWinAPIとWindowsGUIアプリケーションのコードを理解している必要があるので、
C言語でもある程度理解できていないと難しいと思いますよ。



TY

リンク

2009/11/9(Mon) 17:34:33|NO.28791

vexさん
グラフィックを表現するだけで私には充分に敷居が高かったのでHSPを選びましたが
プログラム同士の情報のやり取りも相当に敷居が高いようですね
敷居が低い方法がないのであればHSPはあきらめざるを得ません
グラフィックはとても初心者にフレンドリーだったので
とても期待していたのですが、、、、、、

f(出港前)さん
手っ取り早いということは敷居が低いというわけではないのですね
似たようなことをやっている実例があればいいのですが
今のところネットでこれはというサンプルが見つかりません

お話を聞く限りやっぱりかなりむずかしいことのようですね



TY

リンク

2009/11/9(Mon) 18:17:32|NO.28792

珠後さん 
ありがとうございます
ディスク自体の寿命を縮めるってのはちょっと怖いですね

あえてDLL化するならこれを参考にすればよろしいのですか?
fさんによるものらしいですが知識がないとけっこう大変そうだ
http://hsp.tv/play/pforum.php?mode=pastwch&num=22578



SHI

リンク

2009/11/9(Mon) 19:07:04|NO.28793

思考エンジンをHSP用に書き直すとか



GENKI

リンク

2009/11/9(Mon) 19:45:00|NO.28794

>>NO.28792 TYさん
そのスレは個人的には大変役に立ちました。
C++とかって凄く苦手なんですが、おかげで実際にDLLを作ることが出来ましたので。
Cで何か作れるレベルなら、DLLは作れると思います。



足利超神

リンク

2009/11/9(Mon) 20:38:24|NO.28796

C言語をほとんど知らない自分でもfさんのスレどうりにやったらDLL作れました^^
簡単でしたよ。

距離を測る関数を作ってみました。
ソースコード

#include <windows.h> #include <math.h> //------------------------------------------------------------------------------- // DLLエントリー //------------------------------------------------------------------------------- BOOL APIENTRY DllMain( HINSTANCE hInstance , DWORD fdwReason , PVOID pvReserved ) { switch( fdwReason ) { case DLL_PROCESS_ATTACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: break; } return TRUE; } int WINAPI distance(double ax,double ay,double bx,double by){ double disstat; disstat = sqrt((bx-ax)*(bx-ax)+(by-ay)*(by-ay)); return disstat; }
モジュール定義ファイル

LIBRARY "test" EXPORTS distance @1
HSPではこう宣言しました。

#uselib "distance.dll" #cfunc distance "distance" double,double,double,double



カスモジュールですが、動作はHSPで距離を求めるモジュールを作ったのと違うんでしょうか?



ANTARES

リンク

2009/11/10(Tue) 03:25:32|NO.28799

>敷居が低い方法がないのであればHSPはあきらめざるを得ません
 DLLさえ作れれば、HSPからCへは引数として渡すだけでいいのでとても簡単です。
固定長のint型配列でよければ、HSP側は数値型配列として渡せばいいでしょう。
不定長ならint型配列と長さを引数にします。
 int型がまずければ、HSP側ではバイナリデータを文字列として渡します。
C側は文字列へのポインタまたはバイト配列として受け取ります。

 戻り値(CからHSPへ渡すデータ)が4バイトを超える場合は、
HSP側で数値配列か文字列変数を用意し、そのポインタ(varptr)を
引数として渡します。
C側では受け取ったポインタに書き込みます。



ANTARES

リンク

2009/11/10(Tue) 03:37:27|NO.28801

>例えばHSPから数MBのファイルに直接アクセスして
>○○番目のバイトの数字を取得してくる
>みたいなことができればいいかなと思っています。
bload ファイル名, 変数名, 長さ, 位置
位置の容量が符号つき32ビットなので、2Gバイトを超えるファイルは
ダメです。



コロスケ

リンク

2009/11/10(Tue) 11:57:49|NO.28805

なんでfってこんなに腰ぎんちゃくが多くてみんなで自作自演までやるの?
このグループって何なの?



f(出港前)

リンク

2009/11/10(Tue) 14:08:54|NO.28807

NO.28805 コロスケ>

よし、俺と一緒にアンチf同盟作ろうぜ!
最近滅多にHSP掲示板に来ないくせに、生意気なんだよ、fは!


あと、一応だが、あのスレ内容に責任持たないので。
最近はDLLで呼び出しに使う関数のプロトタイプ宣言をまとめて

extern "C" {
}

で囲むようになった。



コロスケ

リンク

2009/11/10(Tue) 15:29:13|NO.28809

なんて言うのかなあ。
「あんまりビッグ感のないボスとトゲトゲしいだけは一人前のチンピラ軍団」って言うのかなあ。
fグループは。そろそろいいんじゃないの?



f(出港前)

リンク

2009/11/10(Tue) 15:58:30|NO.28810

俺自身「グループ」なんて言われて「え?マジ!?俺いつの間にかグループ作ってたの!?」
とか思ってんのに、そっちで勝手にその辺気にしてもまるで意味無いんでね?


どうしてもってんなら、俺のサイトの方で話そうぜ。
HSPともスレ内容とも関係無さそうだしな。



f(出港前)

リンク

2009/11/10(Tue) 16:00:35|NO.28811

私的には

過去に書いたものに対して「参考に立った」「役に立った」と言われるのは大変嬉しい。
評価してもらった事には感謝する。

これだけは書いとく。



TY

リンク

2009/11/10(Tue) 18:51:12|NO.28814

みなさまいろいろコメントありがとうございました
DLLでやるのなら何とかなるという雰囲気を感じたので
これからDLLってなんなのか勉強してみます



KK

リンク

2009/11/10(Tue) 23:06:44|NO.28816

<br />
C言語だけでも出来ます。<br />
HSPだけでも出来ます。<br />
<br />
パソコン内の違うプログラムのような<br />
同じコンピュータ内からの外側からの直接のプログラム同士でもやりとり出来ます。<br />
<br />
通信の場合はサーバーと同じなので簡素化しても元は変わりません。<br />
<br />
ただし、複数のモノが動いた時に<br />
C++のようなマシンに直接アクセス出来るものでないと<br />
受信と送信のスピードとタイミングの変化により<br />
不安定になる場合があります。<br />
<br />
受信側と送信側の通信速度とプログラム動作環境を多少考慮しておく必要があります。<br />
<br />
スクリプトならばやり取りのスピードを落とし出来るだけ一度に<br />
まとめて送信し、<br />
同期をとりやすくしたほうがいいです。<br />
<br />
最近、どこかでゲームの企業の者が通信についての出来ている技術について言っていました。<br />
その言葉がプログラムをする者に役立つとおもわれます。<br />
インターネットのニュースのタイトルに出ていたような気がします。<br />
<br />
今回の説明はC言語やHSPだけのものではありません。C言語だけでも出来ます。<br />
<br />
HSPならこのマニュアルを読んでください<br />
hspext.as<br />
hspsock.as<br />
hspinet.as<br />
hsp3cl<br />
<br />
非同期通信は同期通信とは違いクライアントプログラムとサーバープログラムとがあります。<br />
非同期通信がおすすめです。<br />
<br />
DirectPlayもありますがWinSockのほうもいいかもしれません。<br />
ひと昔前ならからDirectPlayでは低水準で使えませんでした。<br />
<br />
よく探せばコードもダウンロードできる状態のはずです。<br />
<br />
専門ならばクライアント・サーバーは関係ありません。<br />
現在は非同期が可能な圧縮・解凍可能である不安定協調型の<br />
ランダムマトリクス解析(エンコード・デコード)通信(動的ともいいます)があります。<br />
<br />
<br />
プログラム同士のやり取りは直接ならインプットとアウトプットが可能ならなんでもOKです。<br />
<br />
現在はWEBのあたりで詰まる者が多いので理解できるだけでもいいです。<br />
<br />
たまたま、立ち寄ったので書いて置きました。<br />
<br />
長文になってしまい失礼しました。<br />
<br />



vex

リンク

2009/11/11(Wed) 23:22:27|NO.28823

簡単にDLLが作れてハッピーになっている方がいるようですが、
DLLが何なるものなのか、その裏ではどのようなことが行われているのかを知らずして
まるでDLLが万能の魔法かのような認識でいるところが怖いです。



KK

リンク

2009/11/12(Thu) 13:19:46|NO.28833

初めてのものは手探りなので
全体をさらっとはやく眺めた後は
一つ一つ明確に見ておくことです。

分からなくなったら

他や全体を見ることをするようにしましょう。

気分転換も良いです。

やろうとしているときは否定が入ると善くありません。

実際のプログラムは組んで実行して確かめるのも早道の一つです。

コードの命令実行の意味を考えて下さい。

それと普通は行なわない方がいるようなので
練習として一つ
プログラムコードが組み上がった全体を意識します。

それから部分に行きコードまで何となくでいいですから
頭の中で模索しておきます。

逆にそのコードから全体へとも行きます。

それを行なっておくと後で違ってきます。

自分の知っていることだけで構いません。

何が必要かも分かってきます。

まず、それも必要です。

学習全体に必要なものでもあります。

時々、ほんの一瞬でもトレーニングしておけば違ってきます。

ネットなら検索やリンクなどのそこにたどり着く方法を知っておくと便利です。

ポータルなども詳しく見ると意外と幅があり便利ですよ。

意外と知らない気づかない便利なものが近くに眠っていることもあります。

ブックマークのようなものは活用したほうが便利です。

検索なら「ワード」です。

情報企業でもかなり気を遣っているようですよ。



ONION software Copyright 1997-2021(c) All rights reserved.