Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / OlePublic / 14 сообщений из 14, страница 1 из 1
03.09.2004, 13:34
    #32679316
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OlePublic
Есть созданый OlePublic-класс

Код: plaintext
1.
oTest = CREATEOBJECT("my_ole.my_zapusk")
ss = oTest.Zapusk()

Как в функции Zapusk узнать где лежит исполняемый модуль моего класса...
Код: plaintext
1.
2.
PROCEDURE Zapusk
    messagebox(sys( 5 )+curdir()) &&- возвращает директорию откуда я его запустил...
ENDPROC
Через реестр неподходит...
Из-за умных сис-админов, которые его чистят не разбираясь для чё это надо...

Заранее спасибо...
...
Рейтинг: 0 / 0
03.09.2004, 13:38
    #32679328
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OlePublic
1) Передать как параметр при создании объекта
2) Создать преперть в OLE Public и после создания объекта записать в нее нужное значение
...
Рейтинг: 0 / 0
03.09.2004, 13:57
    #32679367
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OlePublic
to ВладимирМ:

Может я не правильно выразился или не понял ответа...

Функция Zapusk находится в моём созданом OlePublic-класс.

Когда я ее вызываю через:
Код: plaintext
1.
oTest = CREATEOBJECT("my_ole.my_zapusk")
ss = oTest.Zapusk()
То я не знаю где его исполняемый модуль, соответственно не могу дать этот путь как параметр...

А функция Zapusk должна устоновить для себя текущую директорию ту-
где исполняемый модуль и отработать...
после:
Код: plaintext
release oTest &&в главном исходнике
эти два исходника начинают жизнь раздельно...
Но текущая директорию у класса не та, соответственно при попытке там че-то сделать идут одни свалы...
...
Рейтинг: 0 / 0
03.09.2004, 14:06
    #32679388
akrisiun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OlePublic
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
oTest = CREATEOBJECT("my_ole.my_zapusk")

oTest.Prepare() 

? "Ole started from ", oTest.cDir

ss = oTest.Zapusk()
 
RELEASE oTest  
.........

DEFINE CLASS my_zapusk AS olepublic 
  
 cDir = "?" 

 FUNCTION Prepare 
  this.cDir =  sys( 5 ) + curdir() 

 -- Как в функции Zapusk узнать где лежит исполняемый модуль моего класса... 
PROCEDURE Zapusk
    messagebox(sys( 5 )+curdir()) &&- возвращает директорию откуда я его 

 
 
...
Рейтинг: 0 / 0
03.09.2004, 14:44
    #32679477
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OlePublic
Уточни еще раз:

Тебе надо узнать где лежит класс "my_ole.my_zapusk" или тот EXE в котором дается команда CREATEOBJECT()?
...
Рейтинг: 0 / 0
03.09.2004, 14:49
    #32679487
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OlePublic
Екзешник...
...
Рейтинг: 0 / 0
03.09.2004, 14:52
    #32679492
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OlePublic
Сорри...

Екзешник этого класа...
Например он на C:\My_Dir\ole.exe

А вызываю я его из D:\My_Dir\test.exe
в тест сидит CreateJbject...
Мне надо узнать где ole.exe...

oTest.cDir - возвращает систамную директорию... а не моего екзешника
...
Рейтинг: 0 / 0
03.09.2004, 15:11
    #32679534
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OlePublic
Это только через реестр. Ведь ты регистришь свой OLE Public в системе (иначе он просто не будет работать). Вот и ищи, где там прописывается путь доступа к собственно файлу ole.exe

Где именно в системе происходит запись путей доступа я не знаю. Подозреваю, что где-то в CLSID

PS: Умные админы здесь ничего не смогут сделать. Если они удалят регистрационные пути доступа, то CREATEOBJECT() просто не найдет нужного класса.

PPS: Можно упростить себе жизнь заставляя создавать для твоих библиотек фиксированную директорию или прописывать к ней путь в основной проге. Но, думаю, сам понимаешь все недостатки такого подхода.
...
Рейтинг: 0 / 0
03.09.2004, 15:42
    #32679609
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OlePublic
Есть выход но он не идеален:

STRTRAN(UPPER(JUSTPATH(SYS(16,0))),UPPER('PROCEDURE .Zapusk '),'')

возвражает путь к екзешнику...

но есть одно но...
если встречается буква я то вместо её пишется белеберда...

Это пока я только на одну букву нарвался... хто знает сико-ко их ещё...
...
Рейтинг: 0 / 0
03.09.2004, 16:33
    #32679753
Vladimir M Sklyar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OlePublic
Если я правильно понял - нада определить где лежит этот самый Ole-класс ?
Вот такой не хитрой функцией у меня определяеться местоположение COM+
объекта, при его запуске (зачем это нада - для хранения разнородных временных/промежуточных данных на сервере не таская их на клиента)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
		LOCAL lnBuffer, lcModule, lnHandle, lcFullName, lnLengthName
		DECLARE INTEGER GetModuleHandle IN WIN32API STRING @cModule
		
		DECLARE INTEGER GetModuleFileName IN WIN32API ;
		    INTEGER hModule, ;
		    STRING @lpFilename,	;
		    INTEGER nSize
		    
		lnBuffer =  255 
		lcModule = "cserver.dll"+CHR( 0 )
		lnHandle = GetModuleHandle(@lcModule)
		lcFullName = REPLICATE(CHR( 0 ),lnBuffer)
		lnLengthName = GetModuleFileName(lnHandle, @lcFullName, lnBuffer)

		IF lnLengthName> 0 
			lcTmp = LEFT(lcFullName,lnLengthName)
			.cWorkDir = SUBSTR(lcTmp, 1 ,AT("cserver.dll",lcTmp)- 1 )
		ENDIF	
...
Рейтинг: 0 / 0
03.09.2004, 16:42
    #32679795
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OlePublic
Нет, это не пойдет ни при каком раскладе. SYS(16,0) возвращает имя стратовой проги, а не твоего OLE-сервера. Попробуй так:

Код: plaintext
1.
2.
3.
4.
5.
6.
PROCEDURE Zapusk
LOCAL lcString, lcProgram, lnPoz, lcPath
lcString=SYS( 16 )
lcProgram = Program()
lnPoz=AT(m.lcProgram,m.lcString)+LEN(m.lcProgram)+ 1 
lcPath = SubStr(m.lsString,m.lnPoz)
RETURN m.lcPath

Хотя, все это не совсем корректно. Правильнее было бы доставать путь доступа из реестра.
...
Рейтинг: 0 / 0
03.09.2004, 17:00
    #32679841
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OlePublic
to ВладимирМ:

Нет, это не пойдет ни при каком раскладе. SYS(16,0) возвращает имя стратовой проги, а не твоего OLE-сервера. Попробуй так:

Так оно тама и сидит...

Только если в пути встречается буква я ,
то оно его не распознаёт, плюс есть ограничение на длину названия директории...

Куча условностей... которые ни где не описаны...
...
Рейтинг: 0 / 0
03.09.2004, 17:25
    #32679899
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OlePublic
Насчет буквы "Я" в OLE читай здесь

http://vfpdev.narod.ru/docs/mtscom_r.html

Раздел "Проблемы CODEPAGE у VFPxT.DLL"
...
Рейтинг: 0 / 0
03.09.2004, 17:34
    #32679921
Crip
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OlePublic
return _vfp.servername
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / OlePublic / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]