Priya Karthish Ответов: 2

Createobject функция процесс преобразования формы VB в c#.net


Я нахожусь в процессе преобразования проекта VB в C#. Теперь у меня возникла проблема с функцией Createobject,которую я не мог точно понять, что это такое.

Set DVXRT = VBA.CreateObject("DVXR48OLE.CDVXRT")
If (DVXRT.Login(nFirma, sCode$, sPWT$, gsDBServer, sPath)) Then.....

Здесь DVXR48OLE.CDVXRT это приложение, сделанное каким - то человеком.Когда вводится условие If, загружается форма входа в систему. Форма входа в систему взята из приложения.

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

Я попробовал это в C#
<pre lang="c#"> Object obj = Activator.CreateInstance(Type.GetTypeFromProgID("DVXR48OLE.CDVXRT"));
If (obj.Login(nFirma, sCode$, sPWT$, gsDBServer, sPath)


Ошибка приходит в том, что в obj нет логина Проблема заключается в отсутствии подробностей о приложении. Если у кого-то есть идеи, пожалуйста, поделитесь со мной. Это будет так полезно

2 Ответов

Рейтинг:
6

Maciej Los

Следуйте инструкциям от: Как новый динамический тип C# может упростить доступ к объекту COM с поздней привязкой[^]

Type custom = Type.GetTypeFromProgID("DVXR48OLE.CDVXRT");
//magic word: dynamic!
dynamic obj = Activator.CreateInstance(custom);
//late binding in action!
if (obj.Login(nFirma, sCode$, sPWT$, gsDBServer, sPath)
{
    //...
}


Priya Karthish

Ошибка : имя "динамический" не существует в текущем контексте. Нужно ли мне добавлять какие-либо ссылки для этого?

Priya Karthish

Теперь ошибка исчезла. Но я не знаю, что форма входа в систему не открывается. Я только что проверил свой проект VB. Я дал точно то же самое, что и в VB. Но из VB открывается форма входа, а из C# она не открывается. Не мог догадаться почему?

Priya Karthish

Есть ли возможность проверить, что находится в функции входа COM-объекта(DVXR48OLE.CDVXRT)?

Maciej Los

Вы должны проверить, если obj не является нулевым первым!

Maciej Los

Вы можете попробовать декомпилировать этот COM-объект. Видеть это: Преобразование Программ Wiki / Декомпиляторы Visual Basic[^]

Priya Karthish

Спасибо. На самом деле мне нужно распаковать журнал перед входом в систему. Теперь это сработало. Спасибо за помощь, а также извините за поздний ответ.

Maciej Los

Всегда пожалуйста.
Овации
Мацей

Рейтинг:
0

F-ES Sitecore

"DVXR48OLE.CDVXRT" - это COM-объект, который должен быть зарегистрирован на компьютере. Чтобы использовать его из .net, вам нужно использовать прокси - систему под названием interop. В основном добавьте ссылку на соответствующий COM-объект через диалоговое окно Add Reference, и Visual Studio создаст класс .net, который вы можете использовать в своем коде, который, в свою очередь, использует базовый COM-объект. В зависимости от того, что делает этот объект, нет никакой гарантии, что он будет работать с вашим кодом c#.

Google ".net interop" или "вызов com-объектов из c#" для получения более подробной информации\примеров.