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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0509
elemedllとHSP6解決


eleme

リンク

2009/5/9(Sat) 21:34:07|NO.25076

C++でHSPで使えるdllを作っているのですが、エラーが出て使えません。
ファイルを選択するダイアログを表示する関数を呼び出したのですがうまくいきません。

HSP側

#uselib "test.dll" #func OpenFile "OpenFile" int OpenFile hwnd
C++側

#define EXPORT extern "C" __declspec(dllexport) EXPORT int OpenFile(HWND hWnd) { OPENFILENAME ofn; LPWSTR path, name; memset(path, '\0', sizeof(path)); memset(name, '\0', sizeof(name)); memset(&ofn, 0, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hWnd; ofn.lpstrFile = path; ofn.nMaxFile = MAX_PATH; ofn.lpstrFileTitle = name; ofn.nMaxFileTitle = MAX_PATH; ofn.lpstrFilter = L"*.txt\0\0"; ofn.Flags = OFN_FILEMUSTEXIST; GetOpenFileName(&ofn); return 0; }
なにぶんC++はあまり使ったことがないものなので・・・
HSP用のdllを作るときはC++で何か特別な処理が必要なんでしょうか?
それともHSPでの呼び出しがうまく言ってないのでしょうか?
教えてくださいm(_ _)m



この記事に返信する


たこ

リンク

2009/5/9(Sat) 23:00:43|NO.25080

まず、そのC++側の関数はちゃんと動いてますか?



eleme

リンク

2009/5/9(Sat) 23:50:19|NO.25082

コンパイルは成功しているのですが・・・
C++の方に問題があるということですか?
hspと関係がなくなってしまうかもしれませんが、教えてください。



moa

リンク

2009/5/10(Sun) 00:23:57|NO.25083

パッと見ただけだが、Cがよく分かってないようにみえる。
・HSPでは基本的に文字列にはシフトJISを使うのでユニコードは使わない。
・ポインタを定義しただけでメモリを確保していない。
とりあえずこの辺を直せばいいんでないか?



レノス

リンク

2009/5/10(Sun) 00:30:35|NO.25084

※実際に動かしたわけではないので、誤りがあるかも知れません。

> エラーが出て使えません
> うまくいきません
それでは、強制終了させられたのか、「VC Runtime Error!」のダイアログに怒られるか、
HSPのエラーなのか、わかりません。

HSPのエラーなら、エラー番号、エラーの出る行、を明記した方が、解決しやすくなります。

> C++

> LPWSTR path, name;
これは「wchar_t へのポインタ」型の宣言です。
「wchar_t」型自体は、今のところ、どこにも存在しません。

> memset(path, '\0', sizeof(path));
> memset(name, '\0', sizeof(name));
path, name ともに、malloc や new で確保されたメモリへのポインタではありません。

また、ポインタ型に対して sizeof 演算子を使っても、戻り値は 4 (ポインタ値のサイズ)です。

( 宣言された変数に入っている値は、不明。
そのため、このコードは、どこかの4バイト*2を破壊しています。 )

ついでに:
> OPENFILENAME
> GetOpenFileName
このソースを見る限り、それぞれ OPENFILENAMEW と GetOpenFileNameW では?



レノス

リンク

2009/5/10(Sun) 00:31:02|NO.25085

あ、被ってしまった^^;



eleme

リンク

2009/5/10(Sun) 00:52:49|NO.25087

ありがとうございます。うまくできました。
なにぶんポインタはまだ把握し切れてないところがあるもので・・・(^^;



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