Форум: "Corba";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];
ВнизКак создать объект из dll? Найти похожие ветки
← →
Smith © (2006-06-20 17:51) [0]Купили устройство к нему идет софт и dll"ка. К dll"ки идет описание для программистов 1Сников следующего содержания:
Для работы с методами и атрибутами компоненты необходимо создать объект "AddIn.PT10".
Пример текста для глобального модуля:
Перем PT10 Экспорт;
Если ЗагрузитьВнешнююКомпоненту("PT10.dll")=0 Тогда
Предупреждение("Компонента не загружена");
КонецЕсли;
PT10 = СоздатьОбъект("AddIn.PT10");
3. Атрибуты компоненты.
InPath, ПутьПриема - директория на PC для приема файлов с терминала. Должен быть проинициализирован до применения методов компоненты. Значение по умолчанию - C:\PT10\In. Значение сохраняется при завершении работы с объектом компоненты.
OutPath, ПутьПосылки - директория на PC для отправки файлов на терминал. Должен быть проинициализирован до применения методов компоненты. Значение по умолчанию - C:\PT10\Out. Значение сохраняется при завершении работы с объектом компоненты.
Port, Порт - номер COM порта PC, через который производится обмен с терминалом. Должен быть проинициализирован до применения методов компоненты. Значение по умолчанию - 1. Значение сохраняется при завершении работы с объектом компоненты.
Baud, Бод - скорость обмена через COM порт. Должен быть проинициализирован до применения методов компоненты. Значение по умолчанию - 115200. Возможные значения - 2400, 4800, 9600, 19200, 38400, 57600, 115200. Значение сохраняется при завершении работы с объектом компоненты.
SelectedFile, ВыбранныйФайл - содержит имя (без пути) файла, выбранного методами компоненты SelectInFile,ВыбратьБазуЗагрузки и SelectOutFile,ВыбратьБазуВыгрузки.
3. Методы компоненты.
Запустить работу сервера обмена по COM порту
int StartServer()
int ЗапуститьСервер()
Параметр - нет;
Возвращаемое значение :
в случае успеха - 1, при ошибке - 0.
Пример использования :
Если PT10.StartServer()=0 Тогда
Сообщить("Ошибка запуска сервера");
КонецЕсли
А програмку для работы с устройством нужно написать на Delphi. Подскажите как работать с этой dll"кой. Как создать этот объект AddIn.PT10 чтоб потом оперировать его методами? Раньше не приходилось работать с внешними функциями :-( Заранее спасибо.
← →
umbra © (2006-06-20 19:00) [1]если длл содержит СОМ-сервер, то сначала надо ее зарегистрировать из командной строки (не обязательно, это, в принципе, дожен делать инсталлятор)
regsvr32 my.dll
Из делфи использовать примерно так:var
myserv : Variant;
flag : integer;
{............................................}
myserv := CreateOleObject("AddIn.PT10");
if VarIsEmpty(myserv) then
ShowMessage("Не удалось создать объект")
else
begin
myserv.InPath := "C:\In";
myserv.OutPath := "c:\Out";
myserv.Port := 1;
myserv.Baud := 9600;
flag := myserv.StartSever;
if flag = 0 then
ShowMessage("Не удалось запустить сервер");
end;
{.......................................................}
if flag = 1 then
myserv.StopSever;
myserv := Unassigned;
← →
Smith © (2006-06-21 08:56) [2]:-( "Недопустимая строка с указанием класса"
← →
Smith © (2006-06-21 11:58) [3]1С"ники код опробовали - из 1С все работает. Устройство откликается.
Я пытался сделать как предложил уважаемый umbra:
regsvr32 PT10.dll
myserv := CreateOleObject("AddIn.PT10");
Регистрируется но в Дельфи пишет "Недопустимая строка с указанием класса". Посмотрел програмкой какие функции экспортирует dll получается только:
DllCanUnloadNow
DllGetClassObject
DllRegisterServer
DllUnregisterServer
Объясните почему на 1С все легко получается? Может какая-то специально заточенная под 1С библиотечка? Буду благодарен за любую помощь.
← →
tesseract © (2006-06-22 09:14) [4]
> Объясните почему на 1С все легко получается? Может какая-
> то специально заточенная под 1С библиотечка? Буду благодарен
> за любую помощь.
Не путай COM и OLE.
Используй CreateCOMObject. А ещё лучше выдери описание интерфейса из сервера.
Компонента 1С является COM- объектом к которому нужно описание интерфейсов, у 1С их есть. Компоненту можно сделать стандартной OLE, но я этого например не делаю, лень .
← →
Smith © (2006-06-22 12:14) [5]Пошел таким путем...
var
V: OleVariant;
R,R2: HResult;
LE: ILanguageExtender;
i,j: Integer;
S: string;
Vv: PSafeArray;
Obj:Variant;
begin
R := CoCreateInstance(CLASS_AddIn, nil, CLSCTX_INPROC_SERVER,
IID_ILanguageExtender, LE);
if Succeeded(R) then
try
LE.FindProp("Port", i);
V:=1;
LE.SetPropVal(i, V);
LE.FindProp("Baud", i);
V:=115200;
LE.SetPropVal(i, V);
LE.FindProp("InPath", i);
V:="C:\PT10";
LE.SetPropVal(i, V);
LE.FindProp("OutPath", i);
V:="C:\PT10";
LE.SetPropVal(i, V);
LE.FindMethod("StartServer",i);
LE.CallAsFunc(i,?????)
Попробовал вроде свойства находит, методы тоже...
А что дальше не знаю. Подскажите как вызвать метод с параметрами и получить результат? Никаких описаний не найду понятных :-(
← →
Smith © (2006-06-22 12:25) [6]Ну никак не пойму как PSafeArray правильно заполнить. Подскажите как тупо параметром строку "blah-blah" передать?
← →
tesseract © (2006-06-22 13:05) [7]получение / вставка
SafeArrayPutElement(pArray,lIndex,varPut);
SafeArrayGetElement(pArray,lIndex,varGet);
// сколько элементов
result:=pArray.rgsAbound[0].cElements;
← →
Smith © (2006-06-22 16:44) [8]
var
V: OleVariant;
R,R2: HResult;
LE: ILanguageExtender;
i,j: Integer;
S: variant;
str:string;
idx:array[0..0] of integer;
sab: SafeArrayBound;
psa: PSafeArray;
begin
R := CoCreateInstance(CLASS_AddIn, nil, CLSCTX_INPROC_SERVER,
IID_ILanguageExtender, LE);
sab.cElements := 1;
sab.lLbound := 0;
PSA := SafeArrayCreate(VT_VARIANT, 1, sab);
idx[0] := 0;
str:="C:\PT10\";
s:=str;
SafeArrayPutElement(PSA, idx, s);
SafeArrayGetElement(PSA, idx, s);
str:=s;
ShowMessage(str);
str пустое значение. Люди добрые подскажите как правильно писать\читать из SaveArray
← →
tesseract © (2006-06-27 00:23) [9]такой вот вариант извлекает из safearray в variant
function TCustomAddIn.GetNParam(var pArray : PSafeArray; lIndex: Integer ): OleVariant;
var varGet : OleVariant;
begin
SafeArrayGetElement(pArray,lIndex,varGet);
result := varGet;
end;
не забывает про vartostr !!!!!
← →
GanibalLector © (2006-06-27 09:16) [10]2 Smith ©
Кстати,что за устройство??? А то тут у меня много всего интересного...могу поделиться ;)
← →
Smith © (2006-06-27 10:59) [11]Устройство - портативный сканер(как в супермаркетах почти) который читает штрих-код. В себе держит файлик куда строчки с цифрами под штрихкодами и пишет. К нему есть база которая с компом по COM порту соединяется. Чтобы забрать файл со сканера нужно поставить на базу сканер и 1Ской можно забирать файл. Причем в 1С все работает как написано в документации.
Перем PT10 Экспорт;
Если ЗагрузитьВнешнююКомпоненту("PT10.dll")=0 Тогда
Предупреждение("Компонента не загружена");
КонецЕсли;
PT10 = СоздатьОбъект("AddIn.PT10");
Если PT10.StartServer()=0 Тогда
Сообщить("Ошибка запуска сервера");
КонецЕсли
Если PT10.InFile(InFileName)=0 Тогда
Сообщить("Ошибка приема файла");
КонецЕсли
Причем впроцессе работы этих пары строк еще и в статус бар 1Ски "Соединение с терминалом, Терминал не подключен" хотя в коде этих строк вобще нигде нет. Получается dll"ковские методы туда пишут...
← →
tesseract © (2006-06-27 14:55) [12]
> К нему есть база которая с компом по COM порту соединяется.
> Чтобы забрать файл со сканера нужно поставить на базу сканер
> и 1Ской можно забирать файл. Причем в 1С все работает как
> написано в документации.
Я бы на твоём месте пробил протокол монитором порта.
И не сканер у тебя, а терминал сбора данных.
← →
Smith © (2006-06-27 15:24) [13]он самый
Поподробней пожалуйста про монитор пирта
← →
Smith © (2006-06-27 15:24) [14]порта всмысле
← →
tesseract © (2006-06-28 13:55) [15]
> порта всмысле
http://www.HHDsoftware.com
Страницы: 1 вся ветка
Форум: "Corba";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.043 c