VS2019, .Net Framework 4.7、 VB.net でプログラムを作成しています。
クラスのインスタンスを作成して、C++ネイティブの関数を呼び出したいと思っています。
一般に、VB.netでの定義はDllImportとDeclareの2通りがあるようですが、クラスをシングルトンにするという考えは無いので、下のサンプルのBeep()にsharedの修飾を付けたくありません。
ところが、① Public Shared Function Beep() の Shared を取り払うとコンパイルエラーが出ます。このエラーの意味も理解できません。
②ではSharedにしなくても正常にコンパイルできます。
質問ですが、
プログラムの実行速度を最優先で設計するならば、①と②のどちらがメリットがあるのですか。
①でSharedの修飾を外すとエラーが出る原因は何ですか。
よろしくお願い致します。
Class MainWindow
Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
Dim cl1 As New testclass
cl1.Beep(8000, 100)
Debug.Print("終了")
End Sub
End Class
Public Class testclass
'① sharedを取り払うとコンパイルが通らない
'System.Runtime.InteropServices.DllImportAttribute' はインスタンス メソッドに適用できません。
<System.Runtime.InteropServices.DllImport("KERNEL32.DLL")>
Public Shared Function Beep(
ByVal dwFlags As Integer,
ByVal dwDuration As Integer) As Integer
'② これは正常に動作する
'Public Declare Auto Function Beep Lib "kernel32.dll" (ByVal dwFlags As Integer,
' ByVal dwDuration As Integer) As Integer
End Class