Вход в систему
Логин
Пароль
 

Sprint #26: Terrain.Сейчас на сайте 12 посетителей
WoWCore
История 2.0
История 1.0
SandBox

Ресурсы
Форум
Файлы

Документация
Литература
Ссылки


Здравствуйте,  Anonymous [ Вход ]

Тема: [Lazarus] WMIНовая тема | Список тем

evdras ··· 06.12.2013, 10:53 ··· Ответить6711.test.pas - 1445 байт   
RomanRom2, здравствуйте.

Хотел бы задать вопрос, как специалисту по оbject Pascal.
Сам пишу на паскале всего две недели :)

Мне нужно создать свой класс в WMI. Но, но я столкнулся с проблемой.
Проблема в следующем - у объекта SWbemObjectPath по мимо прочих есть свойство Class и если его вызвать понятное дело получаю синтаксическую ошибку, остальные Ок. Методов типа GetProperty у этого объекта нет.

Следует так же отметить, что ипользую OLE технологию и переменные OLEVariant.
Приложил файлик с кодом.
Ошибка тут: FWbemObjectPath.Class;

Возможно, решение в использовании правильных типов данных а не var. Тогда пойду гуглить на тему реализации типов WMI :)

Спасибо.
RomanRom2 ··· 07.12.2013, 00:24 ··· Ответить
ну, разумеется, слово class является ключевым. ключевые слова (такие как function, begin, then) использовать нельзя в коде.
к примеру в вов тоже есть класс на ряду с расой, уровнем, хелсами, статами и т.п., я эту проблему раньше решал как то глупо, называл поле _Class, Clas, Klass и т.п., но в результате я подсмотрел как сделано в коде у самих близзов:

int health;
int power[4];
int maxHealth;
int maxPower[4];
int level;
int factionTemplate;
char race;
char classId;
char sex;
char displayPower;
int stats[5];
int baseStats[5];

так я и поступил:

TCharEnumInfo = record
GUID: uInt64;
name: string;
raceID: byte;
classID: byte;
sexID: byte;
skinID: byte;
faceID: byte;

предлагаю вам поступить так же :)

ЗЫ. если честно, я не очень понял вопроса :) вы импортируете сишный код или пишите обертку для dll? насколько я знаю при написании враперов не обязательно точно следовать названиям функций.
evdras ··· 09.12.2013, 08:34 ··· Ответить
Я бы не назвал это обёрткой потому что всё уже реализовано. После подключения ActiveX, Variants, ComObj можно обращаться к WMI и создавать любые объекты и вызывать их свойства, вот только майкрософт не для синтаксиса паскаля код делали и свойства с именем Class явление нормальное - вот этот объект http://msdn.microsoft.com/en-us/library/aa393746%28v=vs.85%29.aspx

Погуглив обнаружил готовую реализацию классов WMI:
http://code.google.com/p/delphi-wmi-class-generator/wiki/WbemScripting_TLB

Вопрос был скорее, да, как при импорте сишного кода обойти ситуацию с именами полей класса являющихся ключевыми для паскаля.
evdras ··· 20.12.2013, 09:05 ··· Ответить
RomanRom2, а возможно ли создать приложение без формы, т.е. вообще не используя forms.
Объясню, написал программу (не сервис) которая время от времени запускается неким сервисом для синхронизации данных.
Форму я конечно скрыл Application.ShowMainForm:= False, но хочется пойти дальше и выкинуть forms вообще, для уменьшения размера .exe
Попробовал создать проект программы всё равно консоль появляется (использую Lazarus, по сути тоже Delphi)...

И еще вопрос, как правильно в дельфи RetCode делать.
Попробовал в эксепшен поставить ExitCode := 777; но вернулся 0, возможно из-за того, что я делаю Application.Terminate;
RomanRom2 ··· 21.12.2013, 03:07 ··· Ответить
ну первая же ссылка в гугле :)
http://delphi.about.com/od/delphitips2008/qt/no_main_form.htm

насчет выхода сделай следующее:
halt(777);
Регистрация | Новая тема | Список тем


Copyright © 2005-2019 WoWCore Team