ちょっと、意味不明なタイトルですいません。
要は、DLLの関数を呼ぶ時に、
VB(.NET)のモジュールのStringDll関数の中で以下のように呼ぶと
フォーム上のreturn_numという名のテキストボックスに、数字が返ってこないのです。
StringDllという関数を無くして、return_num.Text = ReturnNumber(X).ToStringを
cmdDraw.Clickに記述すればちゃんと数字を呼び出せるのですが、
関数として扱うにはどうすればよいのでしょう?
**フォーム**********************
Public Class frmspace
Inherits System.Windows.Forms.Form
#Region " Windows フォーム デザイナで生成されたコード "
#End Region
Private Sub cmdDraw_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDraw.Click
Call StringDll()
End Sub
End Class
**モジュール**********************
Module _Module
Public Declare Function ReturnNumber Lib "givestrings.dll" (ByVal X As Integer) As Integer
Public X As Integer
Public Sub StringDll()
Dim frmspace As New frmspace
frmspace.return_num.Text = ReturnNumber(X).ToString
End Sub
End Module
関数コールの仕方が間違っているのではなくて、
クラスの概念が間違っています。
起動時に表示されるfrmspaceフォームの中から
モジュール内のStringDll関数をコールしていますが、
その中では『新たにNewで作成したfrmspace フォーム』の
テキストボックスに対して値を入れています。
起動時に表示されるfrmspaceフォームと
値を格納しようとしているfrmspaceフォームは別物です。
この場合、StringDll関数を以下のようにし、
Public Function StringDll() As String
Return ReturnNumber(X).ToString
End Sub
クリックイベント内で以下のようにすればいいかと思います。
Me.return_num.Text = StringDll()
ツイート | ![]() |