|
|
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
|
|
|
|