none
C言語で作成されたDLLのAPI関数にNULLを渡す方法 RRS feed

  • 質問

  • まつ といいます。

    よろしくお願いします。

     

    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)

     

    素人の質問で申し訳ありませんが、ご回答の程をよろしくお願いします。

    2007年12月17日 14:09

回答

  • Hongliang さん

     

    迅速な回答、感謝いたします。

    ご指摘の部分、見落としていました。

    大変申し訳ありませんでした。

     

    教えていただいたようにAPI宣言を変更したところ、問題はすべて解決しました。

    参考に教えていただいた項目について、今から勉強したいと思います。

     

    どうもありがとうございました。

    これからもよろしくお願いします。

    2007年12月18日 2:51

すべての返信

  • ByVal sData() As Byte

    で宣言すれば悩む必要もなくなりますね。

    2007年12月17日 14:49
  • Hongliang さん

     

    ご回答ありがとうございます。

     

    >ByVal sData() As Byte

    >で宣言すれば悩む必要もなくなりますね。

     

    NULLを指定しなければならないパターンはごく希でして、多くの場合はデータを渡さなければなりません。

    よって、単純にByRef を ByVal に変更できない事情があります。

    どうしても無理ならば、別名のAPI宣言をもうひとつ追加すればいいのでしょうが・・・

     

    ヘルプの方に、強制的に値渡しにする場合はプロシージャの呼び出し時に引数をかっこで囲めばいいと書いてありました。

    これはAPI関数にもあてはまるのでしょうか?

    Dim retApi As Integer =  HogeFunc(5000 , (Nothing) )

     

    申し訳ありませんが、詳しい方がおりましたら、ご回答の程をよろしくお願いします。

    2007年12月18日 1:14
  • よく見てください。単純に ByVal に置き換えただけではありません。

    相互運用マーシャリング の記述・サンプルも参考になさるといいでしょう。

    2007年12月18日 1:33
  • Hongliang さん

     

    迅速な回答、感謝いたします。

    ご指摘の部分、見落としていました。

    大変申し訳ありませんでした。

     

    教えていただいたようにAPI宣言を変更したところ、問題はすべて解決しました。

    参考に教えていただいた項目について、今から勉強したいと思います。

     

    どうもありがとうございました。

    これからもよろしくお願いします。

    2007年12月18日 2:51