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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
1027
ANTARES文字配列の各要素文字列のポインタ9解決


ANTARES

リンク

2012/10/27(Sat) 03:32:52|NO.50263

 文字配列の各要素文字列のポインタを取得する方法を教えてください。
目的は一次元文字配列を文字コード順に並べ替えるdll命令を作ることです。



この記事に返信する


skyblue

リンク

2012/10/27(Sat) 11:44:51|NO.50268

配列のアドレスを取得できるかはわからないですけど
変数のアドレス取得命令を使って変数のアドレスを取得して
そのアドレスがさしているのが(0,0)でint型はアドレスに
+4したのが(0,1)だったはずです。



匿名希望

リンク

2012/10/27(Sat) 13:27:45|NO.50274

varptr(配列(要素))
で取得したアドレスを、別の配列に保存してDLLに渡す方法は駄目ですか?



レノス

リンク

2012/10/27(Sat) 17:54:48|NO.50280

PVal に直接触るのが楽そうです。
pval タイプの引数によって受け取った pval に各要素の添字を設定して、
HspVarProc::GetPtr によってそれぞれの実体のポインタを得る、
という流れ。

#include "hsp3struct.h" // hspsdk フォルダにあるヘッダファイル #include "hspvar_core.h" EXPORT void WINAPI foo( PVal* pval, HSPEXINFO* ex ) { if ( pval->flag != HSPVAR_FLAG_STR ) ex->HspFunc_puterror( HSPERR_TYPE_MISMATCH ); pval->arraycnt = 1; for ( int i = 0; i < pval->size / sizeof(char*); ++ i ) { pval->offset = i; char* p = (char*)ex->HspFunc_getproc(HSPVAR_FLAG_STR)->GetPtr(pval); MessageBox( 0, p, "test", MB_OK ); } }
なお、配列の要素数は pval->len[1〜4] に入っている……はずですが
#func では hsp2.5 互換の PVal が渡されるので変になっています。



ANTARES

リンク

2012/10/28(Sun) 04:05:11|NO.50289

ありがとうございます。
検証には時間がかかると思うので、
結果は後ほど……。



ANTARES

リンク

2012/10/29(Mon) 05:31:19|NO.50317

 そんな関数、どうやって呼び出すのかわかりませんが、
hspda.dllのstrsortのソースを読んで、何とか解決しました。
なお、コンパイラはlcc-win32です。

【Cソース】 #include "hsp3struct.h" long WINAPI __declspec(dllexport) WINAPI chkPval2Hsp3(HSPEXINFO* hei, int p2, int p3, int p4) { APTR ap; PVal* pval; int i; char* p; ap=hei->HspFunc_prm_getva(&pval); for ( i = 0; i < pval->size / sizeof(char*); ++ i ) { pval->offset = i; p = (char*)hei->HspFunc_getproc(HSPVAR_FLAG_STR)->GetPtr(pval); MessageBox( 0, p, "test", MB_OK ); } return 0; } 【hspソース】 #uselib "testdll.dll" #func chkPval2Hsp3 chkPval2Hsp3 $202 sdim stest,64,6 stest="aaaaaa","bbbbb","ccccccc","dddddddd","eeeeeee","fffffff" chkPval2Hsp3 stest end



ANTARES

リンク

2012/10/29(Mon) 06:07:44|NO.50320

 なんでlibファイルの追加なしで動くの?
HspFunc_prm_getvaとかHspFunc_getprocとかの実体ってどこにあるの?



skyblue

リンク

2012/10/29(Mon) 07:18:56|NO.50321

>なんでlibファイルの追加なしで動くの?
>HspFunc_prm_getvaとかHspFunc_getprocとかの実体ってどこにあるの?
hsp実行環境自体の関数



レノス

リンク

2012/10/29(Mon) 18:41:49|NO.50330

興味があるなら OpenHsp の /trunk/hsp3/hsp3code.cpp に
exinfo の初期化部分などがありますのでご参照

> そんな関数、どうやって呼び出すのかわかりませんが、
#func foo "_foo@8" pval, pexinfo
( _foo@8 : foo の名前修飾されたもの、コンパイラによりますが )
です。書いておくべきでしたね、すいません。

というか $202 の方を知らなかったので勉強になりました。



ANTARES

リンク

2012/10/30(Tue) 14:55:25|NO.50346

>興味があるなら OpenHsp の /trunk/hsp3/hsp3code.cpp に
もしかしてhsp3.31のhspsdk\hsp3rd\hsp3embed\hsp3code.cpp?
難しそうです(^_^;;

>#func foo "_foo@8" pval, pexinfo
>( _foo@8 : foo の名前修飾されたもの、コンパイラによりますが )
>です。
ありがとうございます。

>というか $202 の方を知らなかったので勉強になりました。
hsp2流です(^_^;;



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