Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.16;
Скачать: CL | DM;

Вниз

Exception   Найти похожие ветки 

 
kblc ©   (2005-09-05 15:32) [0]

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


 
Digitman ©   (2005-09-05 15:47) [1]


> Во всех проектах (только .dpr) подключена ShareMem (!!!)
> первым


а зачем тебе понадобился ShareMem при такой ситуации ?


 
kblc ©   (2005-09-05 15:48) [2]

Потому что внутри COM-серверов идёт обмен большими строками и используються обшие ресурсы.


 
Digitman ©   (2005-09-05 15:56) [3]


> kblc ©   (05.09.05 15:48) [2]


что значит "внутри" ?

и кому нужен такой СОМ-сервер, который требует borlandmm.dll ?
что, разве СОМ-сервер будет использоваться искл-но в хост-приложениях, написанных в Делфи/ВСВ ?


 
kblc ©   (2005-09-05 16:05) [4]

Я прошу прощения, но я честно говоря не в курсе где именно используется borlandmm.dll :(

 Тогда такой вопрос:
 Можно ли передавать большие строки не использую ShareMem?
 Нужен ли он вообще?
 _______
 И всё же: как решить эту проблему?


 
Джо ©   (2005-09-05 16:07) [5]


>  [4] kblc ©   (05.09.05 16:05)

Может, использовать WideString?
Впрочем, не уверен.


 
kblc ©   (2005-09-05 16:10) [6]

offtopic: Конечно луше использовать PChar, но я не хочу слишком усложнять себе жизнь, всё-таки не просто же так string придумали


 
wal ©   (2005-09-05 16:10) [7]


> Может, использовать WideString?
В СОМ-е есть спец. тип для строк. BSTR. Для Делфи он в WideString преобразуется.

С уважением.


 
kblc ©   (2005-09-05 16:12) [8]

т.е. мне необходимо все string и COM-сервере и клиенте перевести на WideString?


 
Anatoly Podgoretsky ©   (2005-09-05 16:14) [9]

kblc ©   (05.09.05 16:10) [6]
Не чтение документации не освобождает от ответственности.
string полностью совместим с PChar


 
kblc ©   (2005-09-05 16:14) [10]

Я ЗАПУТАЛСЯ(!!!).
 У меня сейчас весит Runtime error 216(!) и я не знаю что с этим делать. И я очень хочу услышать от вас хоть какие-нибудь советы.

 помогите пожалуйста.


 
kblc ©   (2005-09-05 16:17) [11]

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


 
GLFox ©   (2005-09-05 16:22) [12]

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

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


 
Anatoly Podgoretsky ©   (2005-09-05 16:22) [13]

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


 
Digitman ©   (2005-09-05 16:26) [14]


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


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


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

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


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

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


 
kblc ©   (2005-09-05 18:30) [17]

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

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

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

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


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


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

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


 
kblc ©   (2005-09-05 18:37) [19]

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


 
Digitman ©   (2005-09-05 18:38) [20]


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


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

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

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


 
kblc ©   (2005-09-05 18:49) [21]

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

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


 
kblc ©   (2005-09-05 19:24) [22]

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

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


 
debuger ©   (2005-09-05 20:22) [23]

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


 
debuger ©   (2005-09-05 20:22) [24]

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


 
kblc ©   (2005-09-05 21:23) [25]

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

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
 Из-за чего это может случатся?


 
Digitman ©   (2005-09-06 08:57) [26]

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


 
kblc ©   (2005-09-06 09:51) [27]

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


 
kblc ©   (2005-09-06 14:41) [28]

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


 
DesWind ©   (2005-09-06 17:43) [29]

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


 
DesWind ©   (2005-09-06 17:46) [30]

про ошибку 216



Страницы: 1 вся ветка

Текущий архив: 2005.10.16;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.045 c
14-1127466173
stone
2005-09-23 13:02
2005.10.16
Трудности перевода или давайте говорить по-русски


1-1127731906
Voffka
2005-09-26 14:51
2005.10.16
FreeLibrary


1-1127388681
grizzli
2005-09-22 15:31
2005.10.16
Админ delphi


14-1127399020
Карелин Артем
2005-09-22 18:23
2005.10.16
Как давно была установлена Виндовс?


1-1127469304
DelphiLexx
2005-09-23 13:55
2005.10.16
Иконки под сельское хозяйство