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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0805
InoueSoftware自作DLLのロードがhscallbk.dllのロードによって邪魔されてしまう問題について5解決


InoueSoftware

リンク

2016/8/5(Fri) 21:40:32|NO.76541

自作コントロールライブラリとhscallbk.dllを一緒にロードしたら、
自作コントロールライブラリがロードされなくなるのですが、どうしたらいいですか?
登録した関数のアドレスを(varptrで)調べても0しか返ってきません。

hscallbkもどうしても使いたいので、「DLLじゃなくてモジュールを使用したら?」は、無しです。

VC++ソースと、問題になったHSPソースのダウンロード先
http://ux.getuploader.com/Inoue_Monookiba/download/4/UsefulControlPackLibrary.zip

ダウンロードパスワード: ucpldlldl

VC++まだ経験2か月なので、あまり難しいことは言わないでください。



この記事に返信する


MillkeyStars

リンク

2016/8/6(Sat) 07:07:20|NO.76542

define.h ソース内の静的メモリ確保にて、スタックオーバーフローを起こしている為、正しく DLL が初期化できない為に自作 DLL が起動できなくなっているだけです。
ソースを修正し起動テストした場合、正しく共存できました。

[問題箇所]
#define __TabItemMax__ 400
#define __TabMax__ 500
....
extern wchar_t TabStr[__TabMax__][__TabItemMax__][0xFFF]{ 0 };//タブアイテムの文字列

[解決方法]
変数をポインタ変数にして、動的にメモリを確保(malloc)してください。



InoueSoftware

リンク

2016/8/6(Sat) 10:13:12|NO.76543

WEB上のサンプルを見ながら(http://pukulab.blog.fc2.com/blog-entry-28.html)
mallocを使って3次元配列を作成しようとしたのですが、TabStr[0]とTabStr[0][0]に対して
「配列のサイズは 0 より大きくなければいけません」、for (int i = 0; i < __TabMax__; i++)のforに対して
「宣言が必要です」と、エラーが出ました。どうすればいいのですか?

extern wchar_t ***TabStr = (wchar_t***)malloc(__TabMax__ * sizeof(wchar_t**)); TabStr[0] = (wchar_t**)malloc(__TabMax__ * __TabItemMax__ * sizeof(wchar_t*)); TabStr[0][0] = (wchar_t*)malloc(__TabMax__ * __TabItemMax__ * 0xFF * sizeof(wchar_t)); for (int i = 0; i < __TabMax__; i++) { TabStr[i] = TabStr[0] + i * __TabItemMax__; for (int j = 0; j < __TabItemMax__; j++) TabStr[i][j] = TabStr[0][0] + i * __TabItemMax__ * 0xFF + j * 0xFF; }



掘木

リンク

2016/8/6(Sat) 21:18:59|NO.76546

いや、それもうC/C++の領分の質問ですよ。

まぁ延長線ってことでやんわりと答えましょうか。

#define __TabItemMax__ 400 #define __TabMax__ 500 wchar_t TabStr[__TabMax__][__TabItemMax__][0xFFF];
この3次元配列を用意することの良し悪しはおいておくとして、
3重ポインタなんてやらずとも、2次元配列変数のポインタを定義してやってメモリ確保してしまえばいいんです。

// 宣言 wchar_t (* TabStr)[__TabItemMax__][0xFFF]; // ポインタ格納 TabStr = (wchar_t (*)[__TabItemMax__][0xFFF])malloc(__TabMax__ * sizeof(wchar_t[__TabItemMax__][0xFFF]));
なんか書き方キモいけど、こういう構文だもの。しょうがない。


構造体「Cと聞いて…あれ?僕の出番は?」
ポインタ「僕の出番もあんまりないですねえ…」



InoueSoftware

リンク

2016/8/7(Sun) 14:34:26|NO.76547

メモリ確保の所をいじったら上手く動きました。
問題は、hscallbkではなく自作DLLのメモリ確保にエラーがあるのがわかってよかったです。
ありがとうございました。



InoueSoftware

リンク

2016/8/7(Sun) 14:34:55|NO.76548

解決忘れ



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