重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

VC++で作成されたDLLをVB.NetにてそのDLLを呼び出すアプリを作成して
います。以下のパターン2では問題なく動作しますが、パターン1では
DLL側で見たときにchar変数に正しく値が入りません(NULL)になる。
パターン1とパターン2の違いは引数の順番です。
開発環境:VisualStudio2008
OS:WindowsXP SP2

パターン1(この場合はNG)
 VC++側の宣言
  extern "C" __declspec(dllexport) void func1(int i,char*s)
 VB.Net側の宣言
  <System.Runtime.InteropServices.DllImport("func.dll")> _
  Public Sub func1(ByVal i As Long, ByVal s As String)
  End Sub

パターン2(この場合はOK)
 VC++側の宣言
  extern "C" __declspec(dllexport) void func1(char*s,int i)
 VB.Net側の宣言
  <System.Runtime.InteropServices.DllImport("func.dll")> _
  Public Sub func1(ByVal s As String ,ByVal i As Long)
  End Sub

VC++側がパターン1で作成さているため、VC++側を修正をしないで
正常に動かすことは可能でしょうか?

よろしくお願いします。

A 回答 (1件)

> Public Sub func1(ByVal i As Long, ByVal s As String)


Longではないのでは?

intは32ビットの数値型ですので Integer か Int32 でどうでしょうか?


パターン2の場合は引数が逆なのでたまたまうまくいくだけで、もしかしたら
別のところで弊害がでるかも。
(戻り値があったりするとうまくいかないかな)
    • good
    • 0
この回答へのお礼

bluecampus様

回答ありがとうございます。
Int32で問題なく動作いたしました。

 VC++:int → VB.net:Int32

他の引数(longなど)も再度確認してみます。

お世話になりました。

お礼日時:2009/09/09 17:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!