powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / OlePublic
14 сообщений из 14, страница 1 из 1
OlePublic
    #32679316
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть созданый 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
OlePublic
    #32679328
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Передать как параметр при создании объекта
2) Создать преперть в OLE Public и после создания объекта записать в нее нужное значение
...
Рейтинг: 0 / 0
OlePublic
    #32679367
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to ВладимирМ:

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

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

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

А функция Zapusk должна устоновить для себя текущую директорию ту-
где исполняемый модуль и отработать...
после:
Код: plaintext
release oTest &&в главном исходнике
эти два исходника начинают жизнь раздельно...
Но текущая директорию у класса не та, соответственно при попытке там че-то сделать идут одни свалы...
...
Рейтинг: 0 / 0
OlePublic
    #32679388
akrisiun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
OlePublic
    #32679477
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточни еще раз:

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

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

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

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

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

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

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

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

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

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

Это пока я только на одну букву нарвался... хто знает сико-ко их ещё...
...
Рейтинг: 0 / 0
OlePublic
    #32679753
Фотография Vladimir M Sklyar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно понял - нада определить где лежит этот самый 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
OlePublic
    #32679795
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, это не пойдет ни при каком раскладе. 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
OlePublic
    #32679841
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to ВладимирМ:

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

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

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

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

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

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


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