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

Вниз

DLL( cool )->dll:"parameter=nil");   Найти похожие ветки 

 
savyhinst ©   (2007-12-22 19:50) [0]

Помогите пож.!
Уже целых несколько часов пытаюсь передать строку в ДЛЛ, исключений нет, но в ДЛЛ приходит ПУСТОТА!
Спасибо за внимание.


 
MetalFan ©   (2007-12-22 20:05) [1]

а почитать что-нибудь по теме религия не позволяет?
или хотя бы коментарии в dll project файле


 
Германн ©   (2007-12-22 20:08) [2]


> savyhinst ©   (22.12.07 19:50)

Пиши как передаешь. Телепаты по субботам отдыхают.


 
savyhinst ©   (2007-12-22 20:12) [3]

Сначала пробовал через PChar; потом писал
GetMem(Pstr,1024)
Передать(Pstr)
FreeMem(Pstr)
потом через WideString
и в конце, как я когда-то делал, через array[0..128]of char, что должно быть железно. Но ничего не помогает.


 
savyhinst ©   (2007-12-22 20:16) [4]

Да, и ещё везде ставил ;StdCall;


 
Германн ©   (2007-12-22 20:21) [5]

Код хоть какой-нибудь привести можешь? Не надо на пальцах объяснять.


 
savyhinst ©   (2007-12-22 20:27) [6]

...
type dllstr=array[0..128] of char;  
TSetDllIniProc=procedure(ininame:dllstr);
...
const cnst_setDllIniProcName="Effdll_setDllDirectory";
...
var
 iniDllnameProc:TSetDllIniProc;
begin
...
libHandle:=LoadLibrary(PAnsiChar(str_libname));
if libHandle=0 then raise exception.Create("Can"t load effects library");
@iniDllnameProc:=GetProcAddress(libHandle,cnst_setDllIniProcName);
ShowMessage("iniFile.FileName="+iniFile.FileName);
tmpString:=iniFile.FileName;
for i:=1 to length(tmpString) do tmpdllstr[i-1]:=tmpString[i];
iniDllnameProc(tmpdllstr);
iniFile.Free;
end;
...
//dll::
...
var myDir:string;
...
procedure SetMyDir(_myDir:dllstr);
begin
 myDir:=_myDir;
 ShowMessage(myDir);
end;
...
exports
 SetMyDir name "Effdll_setDllDirectory";


 
Германн ©   (2007-12-22 20:34) [7]


>  myDir:=_myDir;

Эта строчка подразумевает что _myDir т.н. zero-based array of char. А где ты в mpdllstr ставишь #0 я не вижу.


 
savyhinst ©   (2007-12-22 20:37) [8]

А как ставить?


 
Германн ©   (2007-12-22 21:05) [9]

Рекомендую перед заполнением массива символами строки заполнить массив нулями.
FillChar(tmpdllstr,SizeOf(tmpdllstr),#0);
for i:=1 to length(tmpString) do tmpdllstr[i-1]:=tmpString[i];


 
DiamondShark ©   (2007-12-22 21:42) [10]


> Германн ©   (22.12.07 20:34) [7]
>
> >  myDir:=_myDir;
>
> Эта строчка подразумевает что _myDir т.н. zero-based array
> of char.

Эта строчка этого не подразумевает.


> А где ты в mpdllstr ставишь #0 я не вижу.

зеро-бэйзед, и зеро-терминатед -- это разные вещи.
Впрочем, второго эта строчка тоже не подразумевает.


> for i:=1 to length(tmpString) do tmpdllstr[i-1]:=tmpString[i];

Допустим, нам повезло, и length(tmpString)<128. Мусор в массиве оставить -- не смертельно.

Теперь вопрос повышенной сложности: как ты думаешь, что произойдёт, если length(tmpString) > 128?


> Германн ©   (22.12.07 21:05) [9]
> Рекомендую

StrPLCopy нынче не в моде?


 
Германн ©   (2007-12-22 21:47) [11]


> DiamondShark ©   (22.12.07 21:42) [10]
>
>

Ты на самом деле думаешь, что я буду с тобой в этой ветке спорить? Мне что больше делать нечего?
:)


 
DiamondShark ©   (2007-12-22 21:57) [12]


> Германн ©   (22.12.07 21:47) [11]

У тебя мания величия: ты в этой ветке меня совершенно не интересовал.



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

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

Наверх




Память: 0.49 MB
Время: 0.017 c
15-1197358652
megabyte
2007-12-11 10:37
2008.01.20
Тема диплома...


15-1197881863
@!!ex
2007-12-17 11:57
2008.01.20
Вэйвлет(Wavelet)


2-1198245704
..::KraN::..
2007-12-21 17:01
2008.01.20
RSS в Delphi


15-1197744595
@!!ex
2007-12-15 21:49
2008.01.20
Охлаждение материнской платы.


2-1198155687
Stepper
2007-12-20 16:01
2008.01.20
Как в Delphi указать путь компиляции проекта? Типа: С:/Executable