掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VC++で作ったDLL内の関数に配列を渡すには? (ID:108563)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
VB側のバージョンが書かれていなかったので、 VC側のバージョンと同様、 Visual Basic 6.0と仮定して回答します。 (VB.NETの場合は、マーシャリングについて調べて見てください) > Call GetArg(arg)のところでargの変数が定義されていません > とエラーがでてしまいました。どうしてでしょ。。 文字どおりの意味だと思いますよ。 「argという名前の変数が定義されていないから」ですよね。 今回の場合はおそらく、GetArg(st)の書き間違いだったのかと。 > 普通に「dim a(10) as long」と宣言して使えないのでしょうか? 上記の場合、普通は a(0)〜a(10)までも 11個分の配列になりますね。 これらを、SafeArrayのまま DLLに渡すのであれば、 Declare Sub foo Lib "bar.dll" (ByRef x() As Long) のように書いて、 Dim a(10) As Long Call foo(a) のように呼び出す事になります。DLL側は、 void __declspec(dllexport)__stdcall foo(LPSAFEARRAY FAR *ppsa) という感じですかね。 一方、DLL側がSafeArrayではなく、 void __declspec(dllexport)__stdcall foo(DWORD * ppsa[]) のような普通の配列の場合は、 Declare Sub foo Lib "bar.dll" (ByRef x As Long) と書いて、 Dim a(10) As Long Call foo(a(0)) という感じにするか、もしくは、 Declare Sub foo Lib "bar.dll" (ByVal x As Long) と書いて、 Dim a(10) As Long Call foo(VarPtr(a(0))) のように呼び出す事になるかと思います。 # なお、私自身、C++は専門外なので、上記のDLL側コードが、正しい文法に # なっているのかどうかを検証する事はできません。m(_ _;)m
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.