1

Тема: .NET контрол

Здравствуйте.
В WINCC (SCADA от Siemens) хочу использовать контрол DataGridView для вывода информации. В дизайнере нельзя указать свойства DataSource и Columns - необходимо заполнять их програмно через VBScript.

Источник данных должен представлять собой объект, реализующий интерфейс System.Collections.IEnumerable (например, System.Data.DataView...

DataView - класс
Пространство имен:  System.Data
Сборка:  System.Data (в System.Data.dll)

System.Data.dll установлена, зарегистрировал её как СОМ-объект. При создании объекта ошибка. Подскажите что я делаю неправильно?

dim obj
set obj = createobject("System.Data.DataView")

http://s4.hostingkartinok.com/uploads/images/2013/06/5e5bde5c83605a75ba4a679633d466d3.png

2

Re: .NET контрол

Если Windows у вас x64, то там два варианта wscript.exe и vbscript.dll. По умолчанию используются 64-битные. Так что если библиотека 32-битная, VBScript её не найдёт в реестре. В этом случае надо выполнять скрипт 32-битным wscript.exe, который в Windows\SysWOW64.

3

Re: .NET контрол

WScript.exe так же не может создать объект. Пробовал и 32 и 64.
http://s6.hostingkartinok.com/uploads/images/2013/06/5e42b63507df37327d8c0462238fca91.png

Посмотрел OLE/COM Object explorer'ом System.Data.dll... в ней только один класс TSQLDebugging. Странно, ведь на MSDN сказано, что эти классы реализованы именно в этой библиотеке...

4

Re: .NET контрол

Значит, это имя класса (его ProgID) — System.Data.DataView — не зарегистрировано в реестре. Вы можете это проверить, поискав его в разделе HKEY_CLASSES_ROOT. Возможно, зарегистрирован только CLSID. Чтобы создать объект, VBScript ищет в реестре его ProgID, как он указан в скрипте, и если нашёл, то берёт оттуда CLSID. Потом ищёт раздел со значением этого CLSID и оттуда уже берёт информацию о местонахождении библиотеки.

Та System.Data.dll, которую я смог у себя найти, не является сама по себе СОМ-сервером, т.к. не экспортирует нужных функций. А где вы взяли свою dll? И вообще, откуда инфа, что надо VBScript использовать?

5

Re: .NET контрол

В графическом редакторе WINCC есть пара гридов ActiveX использовать их не могу, т.к. при добавлении сразу выходит сообщение о том что отсутствует *.lic файл...
Есть пара гридов на .NET, от сюда и стал копать. В WINCC могу использовать только VBScript или C-Script, по всей видимости как то можно их использовать...

Библиотека System.data.dll поставляется вместе с NETFramework. На мсдн указано, что все эти классы (DataView, DataTable и т.д) там есть. Там есть код на VB, я понимаю, что это не одно и то же, но! Где то на просторах интернета видел как именно на VBscript в браузере используют классы DataTable и какой то Грид...

Я не спец и буду рад любой помощи.

6

Re: .NET контрол

molinero, классы и библиотеки .Net достаточно отличаются от привычных нам классов. Лишь некоторые из них можно зарегистрировать и использовать посредством Automation.

7

Re: .NET контрол

alexii, я понял. Есть какая нибудь возможность использовать эти библиотеки посредством VBScript?

8

Re: .NET контрол

В Коллекции кое-что было: VBScript: используем классы .NET (Страница 1) — Windows Script Host, HTA (VBScript, JScript) — Серый форум.

9

Re: .NET контрол

Отлично! Нужный класс создается, но только если запускать 32-битный wscript.

Его можно установить поумолчанию?
http://s4.hostingkartinok.com/uploads/images/2013/06/f19dcb1607fd117bb8615db3c5161142.png

10

Re: .NET контрол

В чём проблема-то? Указывайте полный путь к исполняемому файлу.

11 (изменено: badik, 2013-06-11 14:33:56)

Re: .NET контрол

запускаем 32-битный wscript

Set oFso = CreateObject("Scripting.FileSystemObject")
Set oWs = CreateObject("WScript.Shell")


sysDir=oFso.GetSpecialFolder(1).Path
sysDir64 =oFso.BuildPath(oFso.GetParentFolderName(sysDir),"SysWOW64")


If InStr(WScript.FullName, sysDir64)=0 And oFso.FolderExists(sysDir64) Then
    oWs.Run   oFso.BuildPath(sysDir64,"Wscript.exe ") & """" & WScript.ScriptFullName & """"
    WScript.Quit
End If

WScript.Echo  WScript.FullName

12 (изменено: molinero, 2013-06-11 14:43:26)

Re: .NET контрол

alexii, Да это понятно, просто эти скрипты будут выполняться как макросы...
Поправил реестр
в ключе [HKEY_CLASSES_ROOT\VBSFile\Shell\Open]
%SystemRoot%\system32\WScript.exe заменил на %SystemRoot%\SysWOW64\WScript.exe