Stephen Wickland Ответов: 1

Почему свойство в .NET VB DLL будет отсутствовать при загрузке в C#?


Я пытаюсь поговорить с контроллером прибора на C# через библиотеку DLL .NET VB, предоставленную производителем в примере проекта. Код VB работает безупречно. Когда я прикрепляю DLL в качестве ссылки к своему проекту C#, ключевое свойство отсутствует. Все остальные свойства и методы отображаются так, как и ожидалось. Методы, которые появляются, работают в проекте C#. В Обозревателе объектов VB свойство определяется следующим образом:

ModbusTransaction‎(Byte‎) As Object

который ссылается на код:

Public ReadOnly Property ModbusTransaction(ByVal CommandType As Byte)
    Get
        Call _ModbusTransaction(CommandType)
        Return _TransactionSuccess
    End Get
End Property


Это свойство используется в качестве метода в примере кода, поэтому я не знаю, почему оно не объявлено как таковое. Моя проблема в том, что я не могу выполнить это или знаю, как найти его из C#. Я использую VS 2013, Если это имеет значение.

Спасибо за любую помощь,
СМЗ

Что я уже пробовал:

Я пробовал методы из библиотеки DLL в моем проекте C#, и те, которые не требуют отсутствующего свойства (метода), работают должным образом.

E.F. Nijboer

Убедитесь, что платформа обоих vb.net и проекты c# совпадают (поэтому у них есть соответствующие языковые среды выполнения). Также проверьте, по-прежнему ли они по умолчанию используют "anycpu". Кроме того, я не уверен, что ByVal может вызвать эту проблему. Может быть, попробовать без него, чтобы увидеть, имеет ли он какой-либо эффект.

1 Ответов

Рейтинг:
0

Dave Kreskowiak

Вы не дали коду свойства VB возвращаемый тип.

Public ReadOnly Property ModbusTransaction(ByVal CommandType As Byte) As ????
    Get
        _ModbusTransaction(CommandType)
        Return _TransactionSucess           '<----Where is this value coming from?
   End Get


Или это свойство действительно должно быть функцией??
Public Function ModbusTransaction(ByVal CommandType As Byte) As ????
    return _ModbusTransaction(CommandType)
End Function


Stephen Wickland

Привет, Дэйв, Извини, что я не совсем ясно выразился. Я не изменял исходный код DLL, как это работает в Примере VB. Мне также любопытно, почему "ModbusTransaction" является свойством в DLL, а не функцией. Ваши комментарии в коде имеют смысл, но мои навыки VB слишком плохи, чтобы дать вам хороший ответ. Мой вопрос заключается в том, почему параметр типа object в VB может не отображаться в Обозревателе объектов C#. Я подозреваю, что C# каким-то образом не знает тип из информации в DLL.
Спасибо,
СМЗ

Dave Kreskowiak

После того, как вы попробуете это сделать, это "свойство" VB не будет отображаться в C# как свойство. Он будет отображаться как метод с именем "get_ModbusTransaction".

Что касается того, почему он исчезает из Обозревателя объектов, то я вообще не смог воспроизвести это поведение.

Stephen Wickland

Спасибо, я пропустил изменение имени и типа. Под исчезнувшим я подразумевал исчезнувшее имущество. Он снова появился как метод в C# с немного другим именем, которое в любом случае имеет больше смысла. Спасибо за ваши усилия.