Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Exception [D7, Win95/98, WinME, WinXP]


Страницы:   1 2

kblc ©   (2005-09-05 15:32:00) 

Уважаемы мастера, у меня возникает Runtime error 216 и ещё что-то про borlandmm.dll . Работаю с COM-серверами.
 Во всех проектах (только .dpr) подключена ShareMem (!!!) первым.
 Из-за чего такое возможно?


DesWind   (2005-09-06 17:46:00) [1]

про ошибку 216


DesWind   (2005-09-06 17:43:00) [2]

Такая ошибка может возникать если com-сервер незарегистрирован


kblc   (2005-09-06 14:41:00) [3]

Это не интерфейс, это просто класс, когторый использует СЯинтерфейсом


kblc   (2005-09-06 09:51:00) [4]

Это не интерфейс, это просто класс, когторый использует интерфейс


Digitman   (2005-09-06 08:57:00) [5]

покажи соответствующую интерфейсную декларацию ..


kblc   (2005-09-05 21:23:00) [6]

Вот на этом моменте случается:

procedure TStrParameters.DevideStrings(const sString: string; var arStrings: array of string);

 procedure DelFirstSpaces(var sString: string);
 var
   i: Integer;
 begin
   if length(sString)>0 then
   for i:=0 to length(sString)-1 do
       if sString[i+1]<>' ' then
          break else
          delete(sString,1,i+1);
 end;

var
 nParam: string;
 i: WORD;
 arrStrings: array of string;

begin
 i:=0;
 System.SetLength(arrStrings,MAX_PATH);
 nParam:=sString;
 DelFirstSpaces(nParam);
 while (nParam>'') do
 begin
   if (nParam[1]='"') and (Pos('"',Copy(nParam,2,length(nParam)-1))>0) then
   begin
     arrStrings[i]:=Copy(nParam,2,Pos('"',Copy(nParam,2,length(nParam)-1))-1); <<- ошибка
     Delete(nParam,1,length(arrStrings[i])+2); <<- ошибка
   end else
   if (Pos(' ',nParam)>0) then
   begin
     arrStrings[i]:=Copy(nParam,1,Pos(' ',nParam)-1);
     Delete(nParam,1,Pos(' ',nParam)); <<- ошибка
   end else
   begin
     arrStrings[i]:=nParam;
     nParam:='';
   end;
   inc(i);
   DelFirstSpaces(nParam);
 end;

 prParamCount:=i;
 SetLength(arString,i);

 if i>0 then
 for i:=0 to prParamCount-1 do
     arString[i]:=arrStrings[i];

 SetLength(arrStrings,0);
end;


Ошибки типа : Invalid pointer operation || Access violation
 Из-за чего это может случатся?


debuger   (2005-09-05 20:22:00) [7]

ну тут или справку почитать по ошибочке, или дебагом занятся или код приоткрыть, тут хоть и мастера, но далеко не телепаты.


debuger   (2005-09-05 20:22:00) [8]

ну тут или справку почитать по ошибочке, или дебагом занятся или код приоткрыть, тут хоть и мастера, но далеко не телепаты.


kblc   (2005-09-05 19:24:00) [9]

И что толку?
 Что WideString что string - одно и тоже (Из всех проектов убрал ShareMem). Но всё так же ничего не работает(!!!)

 Помогите плиииз...


kblc   (2005-09-05 18:49:00) [10]

Хорошо, я изменю всё на WideString;

 Исчезнет ли ошибка - напишу позже


Digitman   (2005-09-05 18:38:00) [11]


> 2) другиепрограммы могут использовать часть этих "кусочков"


другие- ключевой момент.

это означает, что ты не вправе использовать специфичные для борландовских сред разработки типы данных, передаваемых параметрами в СОМ-вызовы и получаемых как результаты этих вызовов.

для того СОМ и была придумана, чтобы обеспечить легкую сопрягаемость и взаимодействие между программами, написанными в разных средах с разной спецификой


kblc   (2005-09-05 18:37:00) [12]

Хорошо, я не пользуюсь объектами OLE автоматизации, т.к. возможно
программа будет устанавливаться на Win95 и потому что это просто не нужно в данны момент.


Джо   (2005-09-05 18:35:00) [13]


> Я не пользуюсь объектами OLE автоматизации, т.к. возможно
> программа будет устанавливаться на Win95.

Ну, есть же официальный Windows 95 OLE 32 Update.


kblc   (2005-09-05 18:30:00) [14]

> Digitman ©   (05.09.05 16:26) [14]
 Выбор технологи обосновам тем что:
 1) программа собирается из маленьких кусочков, каждый из которых может взаимодействовать с любым другим.
 2) другие программы могут использовать часть этих "кусочков"

И ещё. Я не пользуюсь объектами OLE автоматизации, т.к. возможно программа будет устанавливаться на Win95. Вот.

 Сейчас попробую совет на счёт WideString; О результатах сообшу.

 Может у кого ещё идеи есть?


kblc   (2005-09-05 16:29:00) [15]

Напишу через час - поехал домой после работы... :(


Erik1   (2005-09-05 16:28:00) [16]

Одним словом Runtime error 216 скорее всего никак неотносится к ShareMem. ShareMem надо выкинуть из проектов, в TLB определить параметры в BSTR, при вызовах просто передовать в них обычные стриги.


Digitman   (2005-09-05 16:26:00) [17]


> kblc ©   (05.09.05 16:17) [11]


расскажи лучше, зачем тебе вообще СОМ-сервер понадобился ...
чем обоснован выбор технологии ?


Anatoly Podgoretsky   (2005-09-05 16:22:00) [18]

kblc ©   (05.09.05 16:17) [11]
Ты просто не умеешь их готовить.


GLFox   (2005-09-05 16:22:00) [19]

Рекомендую прислушаться к следующему заявлению:
>wal ©   (05.09.05 16:10) [7]

А также почитать все таки спецификацию COM и возможно вот это: http://www.delphiplus.org/downloads/articles/interfacesrevisited.zip


kblc   (2005-09-05 16:17:00) [20]

Anatoly Podgoretsky: смешно ;) про их "совместимость" я знаю. Не раз уже с талкивался по молодости при работе с PChar "память не может быть read".


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо