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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0205
hspDLL呼び出しについて5未解決


hsp

リンク

2014/2/5(Wed) 12:14:20|NO.59686

HSPでDLLを指定し

input a //検索文字
input b //書き換え文字

この二種類のinputをHSPに入れ
C++ dll作成のほうに
このaとbの文字を入れたいのですが、、

Dllはこんな感じです。
WINAPI memory (HWND txt)
中略、、(検索文字)
、、、、(書き換え文字)

この検索と、書き換えのところに
HSPのinputを利用して
文字をいれたいのですが
どうすればいいか分かる方いれば
教えてもらえませんか?

C++もはいってるんで
ここに投稿するのもなんだなと思ったの
ですが、HSPも絡んでたので
投稿させてもらいました。

分かる方いらっしゃればぜひ
お願いします。



この記事に返信する


check

リンク

2014/2/5(Wed) 14:08:23|NO.59688

うーん、意味がまったくわからないな。

HSPからDLLを使いたいみたいでもないし、
予約語(input)と同じ名前の関数は登録できないし、
そもそもDLLに登録されている関数が適当だし……

ただC++のソースコード内の文字の検索や置換を行いたいのであれば、
IDEの機能を使ったほうが簡単なんだけどな。



MillkeyStars

リンク

2014/2/5(Wed) 19:34:50|NO.59697

check さん、たぶん 「DLL を作りたいけど、どーやって作るんだ?」って話かと。

まぁ、回答は、hsp に同梱されている hspsdk ってのを見れば一発なんだけどね。
"hsp\\hspsdk\\hpi3sample\\main.cpp" のがHSPプラグインとHSP2.6 $202 方式の説明。

HSP から DLL を呼び出す時に、user32.as に書かれている方法で呼び出すなら、普通に DLL 側の受け取り引数を HSP の型にあわせればいいと思うよ。

;サンプル

#uselib "hspdll.dll" #func DLLTEST "DLLTEST" var //←のDLL側名は、コンパイラによって装飾名が付与されるので、正確には DLL をバイナリエディタなどで見てから設定するように。
なら、DLL 側は、

EXPORT BOOL WINAPI DLLTEST ( char *p1 ){ //sprintf_s p1,p2,p3 :: p1 = 書き換えしようとしている変数 / p2 = 変数のサイズ / p3 = 書き換え内容そのもの sprintf_s(p1,64,"書き換えました。") //マルチバイト文字セット //sprintf_s(p1,64,L"書き換えました。") //Unicode 文字セット return 0; }

上記で、HSPの文字列変数の内容を書き換えできるはず。
もし、Microsoft VisualC++ で、DLL を作る環境である場合で文字セットを変更していないのであれば、上記のソースの Unicode 文字セットみたいに、文字列指定する際の先頭に L をつけてください。
そうしないと、コンパイルエラーになります。また L をつけないで HSP みたいにしたいなら最初からプロジェクトの設定で、マルチバイト文字セットに変更してください。
(上記ソースは、文字セットを マルチバイト文字セットに書き換えた状態で説明しています。)

また、希望にあった処理は一切していません。HSP から受け取った変数の処理は、DLL 側(C++)なので、この掲示板では答えは出ませんのであしからず。



悲しみのチンフェ

リンク

2014/2/5(Wed) 21:33:09|NO.59700

VSのUnicode設定って__UNICODEマクロ設定するだけじゃなかった?
いや文字列リテラルにLをつけてもsprintfの引数はchar*のままだから
wsprintfか_tsprintfのときにLつけないといけないんじゃなかったっけ。



MillkeyStars

リンク

2014/2/5(Wed) 22:30:08|NO.59702

>>悲しみのチンフェさん
うちもリテラルとかさっぱり理解してないから、間違ってるのかな・・・
どこぞのソース引っ張り出した時に、リテラルつけないとエラーを引き起こした時の理解そのままなのかも。
んで、プロジェクトの設定で、マルチバイト文字セットに変えたらエラーなくなったから、たぶんそのときの記憶のまま書き込みしてると思う。

>>hsp
上記指摘により、59697 の書き込みの マルチバイト文字セット・Unicode 系説明については、無視してください。



check

リンク

2014/2/6(Thu) 13:12:53|NO.59716

>たぶん 「DLL を作りたいけど、どーやって作るんだ?」って話かと。
ああ、なるほど。

MillkeyStarsのソースコードはおそらくコンパイルが通らないと思う。
関数の前に以下のコードを追加すればいいと思う。

#define EXPORT extern "C" __declspec(dllexport)
こうすればDLLの関数にコンパイラによって装飾名が付与されずにエクスポートされる。

最近の(ver 6.0以降?)VSは標準でUNICODEの設定になっているので、
HSP側から文字列を受け取ってWindowsAPIをDLL側から呼び出すときには、
プロジェクトの設定でマルチバイト文字セットに変える必要がある。



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