Delphi XE и DLL

аватар: Xaikon
Звание: Наблюдатель
Сообщений: 43

Объясните как работать с Dll
так чтобы в них можно было без палева передать параметры и получать от туда данные.
Так как у меня нефига не получается, подключаю dll , и не могу туда передать параметры , код компилится нормально , а во время работы ошибка на ошибке,

аватар: angryvitum
Звание: Посвященный
Сообщений: 399

Параметры должны быть понятными для Windows типов. Вместо строк передавать указатели на строки (PChar, PAnsiChar, PWideChar), не передавать в качестве параметров объекты. Четко представлять, что в общем случае приложение использует свой менеджер памяти, а DLL работает с менеджером памяти Windows. Это если коротко! ]]>Ну и изучать матчасть]]>

аватар: Nik RON
Звание: Энтузиаст
Сообщений: 292

angryvitum написал(а):
Вместо строк передавать указатели на строки (PChar, PAnsiChar, PWideChar)

в DLL можно использовать WideString.. думаю с ними работать куда удобнее...

аватар: Nik RON
Звание: Энтузиаст
Сообщений: 292

Xaikon написал(а):
Объясните как работать с Dll
так чтобы в них можно было без палева передать параметры и получать от туда данные.
Так как у меня нефига не получается, подключаю dll , и не могу туда передать параметры , код компилится нормально , а во время работы ошибка на ошибке,

Или подробнее опиши свою ситуацию, или выложи исходники.. посмотрим в чём проблема.. а иначе получишь только общие рекомендации..

аватар: angryvitum
Звание: Посвященный
Сообщений: 399

Цитировать
в DLL можно использовать WideString.. думаю с ними работать куда удобнее...

Действительно! Не знал... ]]>Век живи, век учись]]>

аватар: Xaikon
Звание: Наблюдатель
Сообщений: 43

Спасибо огромное , статьи очень помогли ))) WideString рулит Laughing out loud
П.с. не закрывайте тему будет пару вопросов по коду кое какому )))

аватар: Nik RON
Звание: Энтузиаст
Сообщений: 292

Где код решения твоего вопроса? думаю тут многим будет интересно посмотреть..

аватар: AnthonySoprano
Звание: Советник
Сообщений: 815

Тема не будет закрыта, но мы уже как-то привыкли, что 1 топик = 1 вопрос. Если вопрос намечается по дальнейшей работе с сабжем, то, думаю, можно и сюда. Но иначе отдельным топиком будет удобней Smile

аватар: Xaikon
Звание: Наблюдатель
Сообщений: 43

завтра с утра выложу исходники примера, исходники на работе.
А вопрос будет по теме этого топика, разбор исходников )

аватар: Xaikon
Звание: Наблюдатель
Сообщений: 43

Доброго времени суток, !
Выложил исходники, по прежнему пытаюсь решить вопрос передачи данных между DLL и EXE.
Не выложил раньше потому что пытался самостоятельно решить проблему.
Прошу помочь разобраться и довести до ума исходники.

Этот кусочек кода находится в Client\Unit1.pas

procedure TFormMain.ToolButton2Click(Sender: TObject);
var
  A: I_OrdersRecord_Array;
  X: Integer;
begin
  A :=GetAllOrders_() ; // или DoSomething1    <=с этой функцией работает
 
  for X := 0 to A.Count - 1 do
  ListBoxLog.Items.Add(A[X].OrderName);
 
end;

(При выполнении этого кода вылетает ошибка обращения к памяти)

Всё дело в том что не работает моя функция GetAllOrders_, , а функция DoSomething1 , работает, в чём трабла не пойму. Sad

И ещё посоветуйте как лучше организовать передачу динамических массивов,
Ибо способ реализованный в исходниках по сути просто скопипастил.
И как то не получается его автоматизировать чтобы рационально организовать передачу разных динамических массивов .
Код лежит тут dll\UnitClass.pas

Надеюсь , понятно всё объяснил )))

Хелп ми )))

ВложениеРазмер
Src.zip 409.03 КБ
аватар: Xaikon
Звание: Наблюдатель
Сообщений: 43

Хелп Crying