Private Declare Sub SetString Lib "shard.dll" (ByVal str As String)
Private Declare Function GetString Lib "shard.dll" () As String
Private Sub Command1_Click()
Call SetString("書き込む文字列")'共有メモリに書き込み
End Sub
Private Sub Command2_Click()
Command2.Caption = GetString()'共有メモリから読み出し
End Sub
Private Sub Form_Load()
On Error Resume Next
Call SetString("load") '共有メモリに書き込み
On Error GoTo 0
....
■ VB.netでのサンプル
<System.Runtime.InteropServices.DllImport("shard.dll")> _
Private Shared Sub SetString(ByVal str As String)
End Sub
<System.Runtime.InteropServices.DllImport("shard.dll")> _
Private Shared Function GetString() As String
End Function
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SetString("書き込む文字列")'共有メモリに書き込み
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Debug.WriteLine(GetString())'共有メモリから読み出し
End Sub
■ Excel VBAでのサンプル
DLLの場所の指定がよくわからないので C ドライブ直下にコピーしてパスを直接指定しています。
SetString関数の呼び出しで書き込めるようだがエラーで常に停止するため On Error Resume Next で囲んであります。
マクロの実行でTimerStartを動かすと1秒毎にA1セルに共有メモリの内容が書き込まれ、B1セルの内容が共有メモリに書き込まれます。
Option Explicit
Private Declare Sub SetString Lib "c:\shard.dll" (ByVal str As String)
Private Declare Function GetString Lib "c:\shard.dll" () As String
Dim Timer As Date
Sub TimerStart()
Range("A1") = GetString()
On Error Resume Next
SetString (CStr(Range("B1")))
On Error GoTo 0
Timer = DateAdd("s", 1, Now)
Call Application.OnTime(Timer, "TimerStart")
End Sub
Sub TimerStop()
Call Application.OnTime(Timer, "TimerStart", , False)
End Sub