トップ回答者
C言語で作成されたDLLのAPI関数にNULLを渡す方法

質問
-
まつ といいます。
よろしくお願いします。
C言語で作成されたAPI関数にNULLパラメータを渡す場合の質問です。
以下のように宣言したAPI関数を使用すると仮定します。
Declare Function HogeFunc Lib "hoge.dll" (ByVal w_point As Integer, ByRef sData As Byte) As Integer
パラメータ sData にNULLを渡したいのですが、以下のような記述ではだめなのでしょうか?
Dim retApi As Integer = HogeFunc(5000 , Nothing)
素人の質問で申し訳ありませんが、ご回答の程をよろしくお願いします。
回答
すべての返信
-
Hongliang さん
ご回答ありがとうございます。
>ByVal sData() As Byte
>で宣言すれば悩む必要もなくなりますね。
NULLを指定しなければならないパターンはごく希でして、多くの場合はデータを渡さなければなりません。
よって、単純にByRef を ByVal に変更できない事情があります。
どうしても無理ならば、別名のAPI宣言をもうひとつ追加すればいいのでしょうが・・・
ヘルプの方に、強制的に値渡しにする場合はプロシージャの呼び出し時に引数をかっこで囲めばいいと書いてありました。
これはAPI関数にもあてはまるのでしょうか?
Dim retApi As Integer = HogeFunc(5000 , (Nothing) )
申し訳ありませんが、詳しい方がおりましたら、ご回答の程をよろしくお願いします。
-
よく見てください。単純に ByVal に置き換えただけではありません。
相互運用マーシャリング の記述・サンプルも参考になさるといいでしょう。