tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルAPIの宣言について
記事No13717
投稿日: 2009/05/31(Sun) 05:44
投稿者シス
ヘッダファイルに以下のようなAPI宣言があるとします、
typedef struct testStruct
{
    float a[3][3];
}
BOOL WINAPI test(test testStruct);

これをVB6に移植したいと思っております。

Type testStruct
    v(2, 2) As Single
End Type
Declare Function test (test As testStruct) As Long

試しにこんな感じで書いてみたのですが、コンパイルは通るのですが、
実行処理時にエラーが返ってきます。
float→Singleが良くないのかなぁなど考えているのですが、
他の変数に変えてもダメで、どうすればよいのかわかりません。

調べてもうまくヒットせず困っています。
よかったらご助力お願いできませんでしょうか?
よろしくお願い致します。

[ツリー表示へ]
タイトルRe: APIの宣言について
記事No13718
投稿日: 2009/05/31(Sun) 12:03
投稿者よねKEN
元の関数定義は値渡しのようですから、

> Declare Function test (test As testStruct) As Long

Declare Function test (ByVal test As testStruct) As Long

のようにByVal指定が必要ではないでしょうか?

[ツリー表示へ]
タイトルRe^2: APIの宣言について
記事No13719
投稿日: 2009/05/31(Sun) 20:27
投稿者シス
お返事ありがとうございます。
ユーザー定義型はByval指定できないというエラーが出ました。

floatってVB6に移植する場合はSingleでいいでしょうか?
教えてください。よろしくお願い致します。

[ツリー表示へ]
タイトルRe: APIの宣言について
記事No13720
投稿日: 2009/05/31(Sun) 22:25
投稿者魔界の仮面弁士
a[0][0]〜a[2][2]までの各メンバを、引数として展開しては如何でしょう。
http://support.microsoft.com/kb/161301/ja

[ツリー表示へ]
タイトルRe^2: APIの宣言について
記事No13721
投稿日: 2009/05/31(Sun) 23:10
投稿者シス
この前の質問もありがとうございました!

ちょっとやってみますね。
まとめるとこうでしょうか?
・floatはSingleでOK
・API宣言に構造体のメンバをばらして記述
・Byvalにする

やってみてまた結果を書かせていただきます
助言ありがとうございます!

[ツリー表示へ]