char *
C で記述された dll 関数から a を読み取る際に問題が発生しました。
DLL は rapdll.dll と呼ばれます。ヘッダー ファイルは次のようになります。
extern "C"{void _stdcall New_Rapdll(void);}
extern "C"{void _stdcall TCP_Set_RelayIO(char *Ipaddress,char *SerialNumber,char *Password,char *Data);}
extern "C"{Variant _stdcall Get_Receivedata(void);}
DLL のソース コードがありません。(Get_Receivedata()) に問題があるコマンドのヘルプ ファイルは次のとおりです。
宣言
Char * Get_Receivedata(void)
例:
Get_Receivedata ()
戻り値:
See Response from RAP: Success
Data empty: Fail
Description:
This function is getting response from RAP.
これまでに書いたコードは次のとおりです。
Public Class Form1
Declare Sub TCP_Set_RelayIO Lib "rapdll.dll" (ByVal Ipaddress As String, ByVal Serial As String, ByVal Pass As String, ByVal Relay As String)
Declare Sub TCP_Get_SerialNumber Lib "rapdll.dll" (ByVal Ipaddress As String, ByVal Pass As String)
Declare Sub New_Rapdll Lib "rapdll.dll" ()
Declare Function Get_Receivedata Lib "rapdll.dll" () As String
Dim Result As String
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
Function rap() As String
Result = Get_Receivedata()
Return Result
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim st As String
Call New_Rapdll()
Call TCP_Set_RelayIO("192.168.1.2", "0000", "0000", "00120")
st = rap()
MsgBox(st)
End
End Sub
End Class
st = rap()行まではすべて正常に動作します。その前のコマンド「Call TCP_Set_RelayIO("192.168.1.2", "0000", "0000", "00120")」は、このデバイスのリレーをリセットするため、正しく機能します。しかし、Get_Receivedata
関数を使用して返信を読み取ろうとすると、「System.AccessViolationException」タイプの未処理の例外が発生します。
char *
問題が関数からの戻り値を読み取ろうとしていることはわかっていますがGet_Receivedata
、これを適切に行う方法がわかりません。
助けてくれてありがとう!