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

Вниз

Функция в DLL с типизированным результатом?????   Найти похожие ветки 

 
Ultr ©   (2004-04-20 17:33) [0]

Я хочу использовать ф-ю в ДЛЛ, которая-бы возвращала не одно значение, а record значений. Выглядит ето так:

type RunDLLProc = function(SendData: TRegData): TReturnData; stdcall; (это экспортная ф-я в ДЛЛ"ке)

...она в принципе даже работает, и результат возвращает, но после ее исполнения ДЛЛ не хочет делать ФриЛибрари.

...если вместо TReturnData я ставлю просто, скажем,  byte, все прокатывает без проблем.

Поможите, люди, горю...


 
SammIk ©   (2004-04-20 17:35) [1]

А ты вовробуи так
type
rec=record
end;
prec=^rec;
type RunDLLProc = function(SendData: PRec); stdcall;


 
VAleksey ©   (2004-04-20 17:38) [2]


> Ultr ©   (20.04.04 17:33)  

А ты ShareMem использовал?


 
Ultr ©   (2004-04-20 17:39) [3]

Уточнения:
1. TReturnData = record
     два string"а
   и два byte
  end;


2. В экзешнике я, естественно, так-же ф-ю описываю, как и в длл...


 
Digitman ©   (2004-04-20 17:40) [4]

Удалено модератором


 
SammIk ©   (2004-04-20 17:40) [5]

Передоваи в в-ю не данные, а указатель на эти данные,
и возвращяи, тоже не данные а адреса.
Алексеи тему говорит, с этим тоже могут быть косяки


 
PVOzerski ©   (2004-04-20 17:40) [6]

Тогда уж так:
procedure(SendData:TRegData;var ReturnData:TReturnData);stdcall;
А по сабжу: в самом деле, интересно...


 
PVOzerski ©   (2004-04-20 17:43) [7]

>     два string"а
Вот с этого бы и начинал... Надо, чтобы и dll, и вызывающая ее прога юзали один и тот же менеджер динамической памяти. Потому как AnsiString - вещь очень хитрая. ShareMem - это стандартное решение от Borland.


 
SammIk ©   (2004-04-20 17:43) [8]

Удалено модератором


 
SammIk ©   (2004-04-20 17:44) [9]

Да и что я не так сказал?


 
Digitman ©   (2004-04-20 17:45) [10]

Удалено модератором


 
SammIk ©   (2004-04-20 17:48) [11]

что  нельзя передовать в ф-ю DWORD(ака POINTER)?
Переубели меня, если я не прав.


 
VMcL ©   (2004-04-20 17:51) [12]

>>Ultr ©  (20.04.04 17:39) [3]

см. [2].


 
Digitman ©   (2004-04-20 17:51) [13]


> SammIk ©   (20.04.04 17:48) [11]


вопрос был поставлен конкретно


> ДЛЛ не хочет делать ФриЛибрари


ты же полез в дебри... к тому же - дебри сомнительные :


> type RunDLLProc = function(SendData: PRec); stdcall;


и это - ФУНКЦИЯ ??


 
PVOzerski ©   (2004-04-20 17:53) [14]

2SammIk ©   (20.04.04 17:48) [11]
Можно. Только, как минимум, нужно, чтобы функция что-нибудь возвращала. Иначе уже JavaScript какой-то.


 
PVOzerski ©   (2004-04-20 17:55) [15]

А вообще-то при передаче параметра-указателя сразу может встать вопрос: кто под него память выделит? И здесь начинающий программист может наломать дров.


 
Digitman ©   (2004-04-20 17:55) [16]


> SammIk ©   (20.04.04 17:48) [11]
> что  нельзя передовать в ф-ю DWORD(ака POINTER)?


ты хочешь заставить ДУМАТЬ автора ? или ты хочешь , чтобы заставили думать ТЕБЯ, прежде чем постить то, что имеет весьма посредственное отношение к сабжу вопроса ?


 
SammIk ©   (2004-04-20 17:56) [17]

Это всеровно что анегдот:
-ты масло маж.
-я мажу.
-Нет, ты не мажешь, а клядешь
А ф-и и процедуры- одно и тоже, тока одно возвращает осмысленныи
результат, другое что душе угодно(VOID).
И разве через поинторы не лучше?
Нинадо никаких ShareMem цеплять.


 
WebErr ©   (2004-04-20 18:01) [18]


> type RunDLLProc = function(SendData: TRegData): TReturnData; stdcall;

А она точно должна быть stdcall?


 
Digitman ©   (2004-04-20 18:01) [19]

Удалено модератором


 
PVOzerski ©   (2004-04-20 18:01) [20]

>А ф-и и процедуры- одно и тоже, тока одно возвращает осмысленныи
>результат, другое что душе угодно(VOID).
Ага, только надо же с синтаксисом языка считаться. И писать procedure там, где "VOID". А то компилятор не поймет.
>И разве через поинторы не лучше?
А теперь представь себе: ты получил в dll-ную ф-цию указатель на запись с длиннымим строками и у одной из этих строк, работая в DLL, попытался поменять длину. Что будет? Вот тебе и указатель...


 
SammIk ©   (2004-04-20 18:05) [21]

Подумаешь немного окосячил, с кем не бывает.
А принцип я думаю и так был понятен, если нет то горе мне,
слепцу этакому.
И что будет, если не секрет?


 
Digitman ©   (2004-04-20 18:05) [22]

Удалено модератором


 
WondeRu ©   (2004-04-20 18:07) [23]

Удалено модератором


 
Digitman ©   (2004-04-20 18:08) [24]

Удалено модератором


 
PVOzerski ©   (2004-04-20 18:09) [25]

2SammIk ©   (20.04.04 18:05) [21]:
А непредсказуемо что будет. Но суть проблемы - та же, что в [1]: попытка работать с автоматически переинициализируемым динамическим блоком памяти, контролируемым другим менеджером кучи. То, во избежание чего sharemem используют.


 
WondeRu ©   (2004-04-20 18:11) [26]

Удалено модератором


 
PVOzerski ©   (2004-04-20 18:11) [27]

2Ultr ©:
Либо юзай ShareMem, либо убирай длинные строки из возвращаемой структуры.


 
SammIk ©   (2004-04-20 18:13) [28]

Удалено модератором


 
Digitman ©   (2004-04-20 18:14) [29]

Удалено модератором


 
Digitman ©   (2004-04-20 18:15) [30]

Удалено модератором


 
SammIk ©   (2004-04-20 18:17) [31]

Удалено модератором


 
SammIk ©   (2004-04-20 18:19) [32]

Удалено модератором


 
WondeRu ©   (2004-04-20 18:20) [33]

Удалено модератором


 
Digitman ©   (2004-04-20 18:27) [34]

Удалено модератором


 
SammIk ©   (2004-04-20 18:29) [35]

Удалено модератором


 
Тимохов ©   (2004-04-20 18:34) [36]

34+35.
Какая досада - я так за этим следил :))))))

Все-таки по теме вопроса, какой выдод - он малость потерялся среди перепалок?


 
SammIk ©   (2004-04-20 18:39) [37]

Удалено модератором
Примечание: Оффтоп...


 
Smithson ©   (2004-04-20 18:46) [38]

Удалено модератором


 
WebErr ©   (2004-04-20 18:56) [39]

Удалено модератором
Примечание: Оффтоп...



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

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

Наверх




Память: 0.55 MB
Время: 0.032 c
1-1080218772
highlander
2004-03-25 15:46
2004.04.11
Округление чисел типа real


9-1049222730
Плохой человек
2003-04-01 22:45
2004.04.11
Изометрический движок с демкой....


7-1080546924
New
2004-03-29 11:55
2004.04.11
Звук через модем


1-1079732940
OneHumanMore
2004-03-20 00:49
2004.04.11
Описание формы в нескольких модулях


3-1081586401
Laymer
2004-04-10 12:40
2004.04.11
Lookup в DBE