Форум: "Начинающим";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c