「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@202) [低] [確認待ち]
@202■ (#559) DLLの関数にfloatの配列へのポインタを渡すとエラーが発生する - LSI (2009-03-12 20:56) /低 未処理
【症状】下記のようにして、floatの配列(とみなした文字列)へのポインタを渡そうとすると、アクセス違反が発生します。
【再現方法】
#ここから
!変数宣言が必要

●GetCharWidthFloat({整数}hdc,{整数}iFirstChar,{整数}iLastChar,{整数}pxBuffer)=DLL(「gdi32.dll」,「BOOL GetCharWidthFloatA(HDC hdc, UINT iFirstChar, UINT iLastChar, PFLOAT pxBuffer);」)

BUFFERとは文字列。
FIRSTとは整数=ASC(「A」)。
LASTとは整数=ASC(「Z」)。

BUFFERに4*(LAST-FIRST+1)を確保。

GetCharWidthFloat(母艦の背景ハンドル,FIRST,LAST,POINTER(BUFFER))。

LAST-FIRST+1回
 CHR(FIRST+回数-1)&「: 」&UNPOINTER(POINTER(BUFFER)+4*(回数-1),「float」)を表示。
#ここまで

【要望】アクセス違反が発生しないように、修正をお願いします。
【バージョン】ver.1.518
【その他】上記のサンプルで、「PFLOAT」を「void *」や「PDWORD」に変更すると、アクセス違反は発生しません。

(#789) RE:DLLの関数にfloatの配列へのポインタを渡すとエラーが発生する - しらたま (2009-05-21 15:20) /低 確認待ち
修正しました。
配列と見なした文字列を渡すことになるので、DLL関数の宣言で「{整数}pxBuffer」を「{参照渡し}pxBuffer」に、呼び出しの時に「POINTER(BUFFER)」を「BUFFER」にしていただければ、エラーは発生しなくなるはずです。

-DLL関数で、引数として実数、64bit整数の配列(バイナリ列)を渡せなかった不具合を修正。(@202)(r123)

(#809) RE:RE:DLLの関数にfloatの配列へのポインタを渡すとエラーが発生する - LSI (2009-05-22 22:37) /低 確認待ち
To: しらたまさん

> 修正しました。

修正ありがとうございます。

(#559)のサンプルを、pxBufferを文字列の参照渡しに変更して、ver.1.521で実行してみましたが、アクセス違反が発生しました。
修正が反映されていないようです。


> 配列と見なした文字列を渡すことになるので、DLL関数の宣言で「{整数}pxBuffer」を「{参照渡し}pxBuffer」に、呼び出しの時に「POINTER(BUFFER)」を「BUFFER」にしていただければ、エラーは発生しなくなるはずです。

1つ質問させてください。

上記の通り、文字列の参照渡しに変更した場合、NULLは渡せるのでしょうか。
また、NULLを渡せる場合、どのように記述するのでしょうか。

#ここから
●Test({参照渡し}pFloat)=DLL(「test.dll」,「void Test(PFLOAT pFloat);」)

Test(????)。※NULLを渡したい
#ここまで

(#826) RE:RE:RE:DLLの関数にfloatの配列へのポインタを渡すとエラーが発生する - LSI (2009-05-24 16:04) /低 解決
> (#559)のサンプルを、pxBufferを文字列の参照渡しに変更して、ver.1.521で実行してみましたが、アクセス違反が発生しました。
> 修正が反映されていないようです。

ver.1.522で、修正されていることを確認しました。

(#828) RE:RE:RE:DLLの関数にfloatの配列へのポインタを渡すとエラーが発生する - しらたま (2009-05-24 17:23) /低 確認待ち
すみません、「」か空を渡せばNULLが渡せるはず…なんですが、対応コードを入れ忘れていました。

-DLL関数で、実数、64bit整数のポインタ引数にNULLを渡せなくなっていた不具合を修正。(@202)(r138)

(#559)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能