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

Вниз

Массив в длл и обратно   Найти похожие ветки 

 
murtix   (2005-07-18 02:30) [0]

Вот этот код не работает

;--------ПРОГРАММА-----------------
TRealArray = array of Double;
TFuncProc = procedure (var x,y : TRealArray);
....
LibHandle := LoadLibrary(PChar(PlugInsPath + Plugins[i].PlFileName));
   if LibHandle >= 32 then
     @funcName := GetProcAddress(LibHandle, PChar(Plugins[i].PlugNames[j]));
   if @funcName <> nil then begin
     SetLength(x, 5000);
     SetLength(y, 5000);
     ShowMessage("000");
     funcName(x, y);
;длл загружается, но когда дело доходит до вычислений, происходит Access violation
     ShowMessage(SysErrorMessage(GetLastError));
   end;
 FreeLibrary(LibHandle);

;--------ДЛЛ-----------------
procedure Fxt_func(var Ax,Ay : TRealArray); stdcall;



Вопрос: почему? Или подскажите,пожалуйста, другой способ.


 
Германн ©   (2005-07-18 02:35) [1]

Скорее всего опять ShareMem :(
О сколько раз твердили миру, что надо читать, то что написано!


 
Юрий Зотов ©   (2005-07-18 04:03) [2]

Во-первых, проверьте использование ShareMem.

Во-вторых, несогласованы соглашения о вызове: в DLL стоит stdcall, в EXE его нет.


 
Anatoly Podgoretsky ©   (2005-07-18 09:22) [3]

Во-первых, проверьте использование ShareMem.

Во-вторых, несогласованы соглашения о вызове: в DLL стоит stdcall, в EXE его нет.

В третьих нежелание автора сотрудничать


 
murtix   (2005-07-18 22:20) [4]

Германн
Что за ShareMem как его использовать.

Юрий Зотов
Во-вторых, несогласованы соглашения о вызове: в DLL стоит stdcall, в EXE его нет.
Разве для LoadLibrary это нужно, ведь длл запускается функция вызывается.
Anatoly Podgoretsky
В третьих нежелание автора сотрудничать
я весь день был на работе :(


 
Anatoly Podgoretsky ©   (2005-07-18 22:24) [5]

murtix   (18.07.05 22:20) [4]
Даже если бы не было параметро, то все равно стоит согласовывать вызов.


 
Юрий Зотов ©   (2005-07-18 22:26) [6]

> murtix   (18.07.05 22:20) [4]

> Что за ShareMem как его использовать.
А справка не работает?

> Разве для LoadLibrary это нужно, ведь длл запускается функция
> вызывается.
Зачем использовать незнакомые конструкции? Уберите stdcall совсем, в данном случае оно не нужно.


 
murtix   (2005-07-19 00:02) [7]

Юрий Зотов
Не работает, битая дельфя (пираты рулят):(
stdcall убрал, работает, тока при закрытии программы происходит ошибка :( щас будем выяснять.


 
Юрий Зотов ©   (2005-07-19 00:23) [8]

> murtix   (19.07.05 00:02) [7]

При чем тут битая дельфя и пираты - так и не понял. А то, что "при закрытии программы происходит ошибка" - вот это очень похоже на отсутствие (или неверное использование) ShareMem. Особенно, если это ошибка 216 или 217.


 
murtix   (2005-07-19 00:33) [9]

В общем пиратская дельфя не устанавливается хелп, не знаю почему дернул меня черт установить 2005.
А ошибка : Runtime Error 216 at 004032E6? блин.
А ShareMem у меня отсутсвует, может хотябы намекнете.


 
alex-drob   (2005-07-19 00:39) [10]

А про Sharemem написанно при создании новой dll в коментарии.

В длл в uses пишешь sharemem, первым. И в программе project -> view source тоже sharemem.


 
murtix   (2005-07-19 00:49) [11]

Спасибо работает никаких Runtime Error 216 :).
Кстати а что будет если я захочу подключить длл написанные на других языках С, асм?


 
Юрий Зотов ©   (2005-07-19 00:56) [12]

> murtix   (19.07.05 00:49) [11]

> что будет если я захочу подключить длл написанные на других
> языках С, асм?

Создайте новую DLL и прочтите в ее коде длинный-длинный комментарий. Там все и узнаете.



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

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

Наверх




Память: 0.49 MB
Время: 0.03 c
1-1121886461
Juice
2005-07-20 23:07
2005.08.07
Как можно из главного потока завершить другой поток ?


14-1121626356
ronyn
2005-07-17 22:52
2005.08.07
Документы Acrobat Reader.


1-1121531102
Defunct
2005-07-16 20:25
2005.08.07
AV при создании формы-фрейма


14-1121667418
Vovchik_A
2005-07-18 10:16
2005.08.07
Умер Спартак Мишулин


3-1120028216
WondeRu
2005-06-29 10:56
2005.08.07
Трудности перевода. BDE->ADO