Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > LPWSTR в dll


Автор: EndErr 3.7.2013, 00:08
Есть dll написанный на QT под C++,  вызываю так
Код

function TestFunc(Param1, Param2: PWideChar): LPWSTR; cdecl; external 'Test.dll' name 'TestFunc';
...
procedure TestMe;
var 
  S, u, p: PWideChar;
begin
  u := PWideChar('abracadabra');
  p := PWideChar('sim-salabim');
  S := TestFunc(u, p);
  ShowMessage(S);
end;

Выдает ошибку при выводе диалога, Access Violation ... KERNELBASE.DLL .
Но иногда работает.
Подскажите как правильно передавать параметры типа LPWSTR функции dll и обработать результат, обычный дебаг не помогает.

Автор: Alexeis 3.7.2013, 08:39
  Хорошо бы еще увидеть объявление на С++ как выглядит.

Автор: northener 3.7.2013, 14:24
Мне лично непонятно кто в таком случае должен быть ответственен за выделение памяти под результат сей функции и за освобождение вышеуказанной после того как она перестанет быть нужна.

Автор: Alexeis 3.7.2013, 14:54
  Ну выделять должна прога на С++, а освобождать должна делфя. Для COM-a это естественный способ работы со строками. Но если не использовать SysAllocString/SysFreeString или другого общего менеджера памяти, то ждать траблов.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)