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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0915
tds12HSPでDLL8解決


tds12

リンク

2014/9/15(Mon) 22:44:54|NO.65017

HSPでDLL...



この記事に返信する


ふぁるこn

リンク

2014/9/15(Mon) 22:49:20|NO.65018




合い挽き

リンク

2014/9/16(Tue) 11:22:19|NO.65025

なんだこれ?消しておけよ



tds12

リンク

2014/9/16(Tue) 21:42:01|NO.65033

>これの事?
いえ、どちらかというと
http://hsp.tv/play/pforum.php?mode=pastwch&num=22460

http://hsp.tv/play/pforum.php?mode=pastwch&num=16025
に近いです。

あと、カテゴリは「宣伝」のほうがふさわしかったかもしれません。

あくまでもHSPで、DLLであるSusiePluginを、...



check

リンク

2014/9/16(Tue) 22:18:20|NO.65034

HSPでDLLを作るにはHSPのシステムの根本から変えなければならない。
仮に実装されるとしてもHSP 4.0とかだろう。
個人的にはインタプリタ言語の仕組みを理解すれば、DLLができないことは直ぐに分かると思うのだが。

なぜDLLが必要なんだ?他の言語と混ぜて利用したいのだろうか?
……素直にC/C++等のネイティブコードが生成できる言語を使うことをお勧めする。



ふぁるこn

リンク

2014/9/17(Wed) 00:16:56|NO.65037




neko

リンク

2014/9/17(Wed) 07:40:37|NO.65040

あながち無理じゃないよ。
たとえば
#module
#defcfunc add int x, int y return x + y #global mes add(1,2)
をCソースに変換してみると、
(一部抜粋)

static void L0001( void ) {
// #defcfunc add int _prm0, int _prm1
// return _prm0+_prm1
PushFuncPrmI(0); PushFuncPrmI(1); CalcAddI();
Prgcmd(2,1);
return;
TaskSwitch(0);
}

static void L0000( void ) {
// mes add(1, 2)
PushFuncEnd();
PushInt(2);
PushInt(1);
PushModcmd(0,2);
Extcmd(15,1);
TaskSwitch(2);
}
のように変換されている。
add(L0001)を呼び出しているL0000を
・外から引数が与えられるようにする
・(mesの呼び出しを取り除く) ・add(L0001)の戻り値をL0000の中で取り出してL0000が返すようにする ・defファイルなり__declspec(dllexport)を使って関数をエクスポートする
などをいいと思うよ。
もちろんCソースの中には__HspInitという関数があって、
これはDLLMainなどの中で適切に呼び出す必要があるなど、
いろいろやらなければならない気がします。
自分では試してないのでうまくいくかはまったくわかりませんが。

あと、あくまでもこれはHSPでDLLを作る方法の候補であって、
ここではHSPでDLLを作ることの意義などに関しては議論しません。



tds12

リンク

2014/9/17(Wed) 22:44:29|NO.65048

>HSPでDLLを作るにはHSPのシステムの根本から変えなければならない。
>仮に実装されるとしてもHSP 4.0とかだろう。
確かに、関数名も引数の数もわからないようなDLLは難しそうだと思います。
そこで、関数名も引数の数も型もわかっているSusiePluginに挑戦することにしました。
(ほかにも、32ビットでよいなどの理由もありました)

>参考になりそうなサイトを幾つか挙げてみた。
ありがとうございます。

>あながち無理じゃないよ。
そういうやり方もあるとは気づきませんでした。
ランタイムの改造や、バイナリレベルにとらわれて、
Cソース変換のことを見落としていました。

>個人的にはインタプリタ言語の仕組みを理解すれば、DLLができないことは直ぐに分かると思うのだが。
現にできてしまったのですが、DLL用ランタイムが。
(もちろん、まだ制限が多いですが)
http://dev.onionsoft.net/seed/info.ax?id=786

>なぜDLLが必要なんだ?他の言語と混ぜて利用したいのだろうか?
技術的に無理だということに挑戦したかっただけなので、
特に必要なわけではありません。
しかし、現在はHPIの変数型拡張に挑戦したいと思っています。

>もし仮にHSPでDLLが作れたとしても、HSPで作るDLLには当然HSPでできることしかさせれらないワケで、
>それはいったい何のためにあるのか・・・・・・?
たとえば、変数型拡張のためにはHPIを作れたほうが簡単だと思います。

>……素直にC/C++等のネイティブコードが生成できる言語を使うことをお勧めする。
趣味なので、ひねくれてみたいときもあります。
(C++でもDLLを作ったことがあります)



check

リンク

2014/9/17(Wed) 23:50:35|NO.65049

>趣味なので、ひねくれてみたいときもあります。
そうか、それなら何も言えないな。

結局質問者の意図が汲み取れなかったんだ、すまん。



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