VB6 - ошибка несоответствия типа аргумента ByRef - где это?

В соответствии с вашим предупреждением и сообщением о сбое вы обращаетесь к пользовательскому интерфейсу в фоновом потоке.
Убедитесь, что ваш код пользовательского интерфейса вызывается в основном потоке.

В случае фоновых потоков вы можете исправить это следующим образом:

DispatchQueue.main.async {
    /// your code here
}

В вашем коде я вижу, что вы устанавливаете себя в качестве делегата потока изображений в фоновой очереди. Это означает, что ваш переход также называется фоном. Исправьте это:

func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection){
    captureSession.stopRunning()

    if let metadataObject = metadataObjects.first {
        guard let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject else { return }
        guard let stringValue = readableObject.stringValue else { return }
        AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
        found(code: stringValue)
    }

    DispatchQueue.main.async {
        self.performSegue(withIdentifier: "toTimerView", sender: self)
    }
}
15
задан Fred Hamilton 27 March 2009 в 01:45
поделиться

3 ответа

Проблема здесь:

Dim FirstLevel, FirstDACtoMeasure As Integer

Это на самом деле объявляет FirstLevel как a Variant и не как Integer поскольку Вы могли бы ожидать.

Это - классический глюк VB6! (и Вы не являетесь первыми, чтобы быть укушенными им).

Объявление переменной на строку избегает проблемы:

Dim FirstLevel As Integer
Dim FirstDACtoMeasure As Integer
40
ответ дан 1 December 2019 в 00:37
поделиться

Джон Т. Вы можете явно объявить переменные в списке.

Dim FirstLevel как Integer, FirstDACtoMeasure как Integer

4
ответ дан 1 December 2019 в 00:37
поделиться

Как Mitch указал, VB6 только объявляет, что последняя переменная в запятой разграничила список как явно определенного типа. Предыдущие записи объявляются, но как варианты.

Чтобы объявить переменные правильно, необходимо обработать их индивидуально.

Dim FirstLevel As Integer
Dim FirstDACtoMeasure As Integer

Это также имело место в предыдущих версиях VB, IIRC, не нового для для VB6.

1
ответ дан 1 December 2019 в 00:37
поделиться