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++側を修正をしないで
正常に動かすことは可能でしょうか?
よろしくお願いします。
> Public Sub func1(ByVal i As Long, ByVal s As String)
Longではないのでは?
intは32ビットの数値型ですので Integer か Int32 でどうでしょうか?
パターン2の場合は引数が逆なのでたまたまうまくいくだけで、もしかしたら
別のところで弊害がでるかも。
(戻り値があったりするとうまくいかないかな)
お礼
bluecampus様 回答ありがとうございます。 Int32で問題なく動作いたしました。 VC++:int → VB.net:Int32 他の引数(longなど)も再度確認してみます。 お世話になりました。