deutschsprachige FoxPro User Group
Forum View
Home
  
  Typenkonflikt bei ActiveX Control- #17680 in section [741690]
Sec: (51) MS-Visual FoxPro 9.0
Von: Gerhard Moser
An: All
Am/Um: 15.10.2018 15:21:25 gelesen

Hallo!

Um Daten von einem Nanodac Temperatursensor mittels MODBUS-Protokoll auszulesen, verwende ich die SMTX Modbus/TCP Master ActiveX Control.

Mein Problem ist folgendes:

Durch Klick auf eine Schaltfläche sollen einige Registerdaten gelesen werden. Der Beispielcode für die Schaltfläche steht mir nur in Visual Basic und in Visual C++ zur Verfügung. Ich habe den Code für VFP abgeändert, bekomme aber beim Ausführen des relevanten Statements einen Typenkonflikt (OLE error code 0x8020005). Die Herstellung der Verbindung mit dem Regler funktioniert aber einwandfrei. Ich nehme an, ich mache irgend etwas bei der Variablendefinition falsch, nur ich komme nicht drauf, was es ist.

Mein VFP-Code der Schaltfläche bis zum Typenkonflikt: Im Anschluss der Code in Visal Basic und in Visual C++:


dimension nRegData(5) as integer && register data buffer
nregdata(1)=0
nregdata(2)=0
nregdata(3)=0
nregdata(4)=0
nregdata(5)=0

e=0 && return error

* Read the first five IR's from slave device 1.
e=thisform.SMTX1.MbReadInputRegs(1, 0, 5, nRegData(1))
==>> Das vorhergehende Statement bringt den Typenkonflikt


Der Code in Visual Basic:
*************************
Private Sub ReadIRs_Click()
Dim nRegData(5) As Integer ' register data buffer
Dim e As Integer ' return error

' Read the first five IR's from slave device 1.
e = SMTX1.MbReadInputRegs(1, 0, 5, nRegData(0))
If e = 0 Then
' no error, display data in text box
IrData = nRegData(0) & vbCrLf _
& nRegData(1) & vbCrLf _
& nRegData(2) & vbCrLf _
& nRegData(3) & vbCrLf _
& nRegData(4) & vbCrLf
End If
Status = SMTX1.LastErrorString ' got error, display it
End Sub



Der Code in Visual C++
**********************

void CSmtxTestDlg::OnReadIr()
{
int nStatus; // return status
short nReg[ 5 ]; // input register buffer


// Read first five input registers from slave 1

nStatus = m_SMTX1.MbReadInputRegs( 1, 0, 5, &nReg[ 0 ] );
if( nStatus == 0 )
{
// No error, display returned input register values.

CString csTemp; // temporary CString object

csTemp.Format( "%d\n%d\n%d\n%d\n%d",
nReg[0], nReg[1], nReg[2], nReg[3], nReg[4] );
GetDlgItem( IDC_IR_DATA )->SetWindowText( csTemp );
}
GetDlgItem( IDC_STATUS )->SetWindowText( m_SMTX1.LastErrorString() );
}


Es wäre großartig, wenn ich diesbezüglich Hilfe bekommen könnte.

Schöne Grüße
Gerhard






Gerhard Moser   15.10.2018 15:21
Hans-Peter Grözinger  15.10.2018 16:47
Gerhard Moser  15.10.2018 18:52
Hans-Peter Grözinger  15.10.2018 19:46
Gerhard Moser  15.10.2018 20:20
Gerhard Moser  16.10.2018 11:07
Tom Knauf  16.10.2018 09:30
Gerhard Moser  16.10.2018 11:08
  
zurück zum Forum