こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VB.netでのVC++呼び出し引数の順番

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++側を修正をしないで
正常に動かすことは可能でしょうか?

よろしくお願いします。

投稿日時 - 2009-09-09 16:30:47

QNo.5275851

すぐに回答ほしいです

質問者が選んだベストアンサー

> Public Sub func1(ByVal i As Long, ByVal s As String)
Longではないのでは?

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


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

投稿日時 - 2009-09-09 16:50:53

お礼

bluecampus様

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

 VC++:int → VB.net:Int32

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

お世話になりました。

投稿日時 - 2009-09-09 17:34:56

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問