Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вызов функции из DLL и конвертация типов


vaBRAMYAK ©   (2008-12-07 20:46:00) 

Здравствуйте! Нужна помощь!
Есть библиотека DLL написана на C++. В ней есть експортируемая функция
_RunSQLConsole(Con : TADOConnection; Str : pchar) : pchar; stdcall.
При вызове этой функции, откривается форма с редактором запроса, текст запроса передается через параметр str, и после закрития формы тест передается вызываемому приложению. Нужно эту функуию вызвать из приложения написанного на delphi 2009.
функцию прикрутил в своем приложении вот так:

function _RunSQLConsole(Con : TADOConnection; Str : pchar) : pchar; Stdcall; External 'SQLTOOLS.dll';

Текст, передаваемый функции имеет тип string и на выходе надо тоже получить string.Вызов:

procedure TForm1.Button6Click(Sender: TObject);
var return, input : pchar;
begin
 input := Pchar(SynEdit1.Text);
 return := _RunSQLConsole(DM.ADOConnection1,input);
 SynEdit1.Text := string(return);
end;

Правильно не работает, при вызове в открывшемся редакторе отображается непонятно что, а при закрытии вываливается ошибка обращения к памяти.
Подскажите как правильно реализовать это дело. Спасибо.


Сергей М.   (2008-12-09 21:31:00) [1]


> Riply ©   (09.12.08 21:13) [15]


Замечание принято.
Педро - это звучит гордо)


Riply   (2008-12-09 21:13:00) [2]

> [14] Сергей М. ©   (09.12.08 20:13)
> Разных С++ в природе - как в Бразилии педров.

<Offtop в защиту Педров>
Бразильские Педры не менее известные личности, чем, например, Вася Пупкин.
Поэтому очень неуважительно о них писать с маленькой буквы :)


Сергей М.   (2008-12-09 20:13:00) [3]


> novex   (09.12.08 19:56) [13]


Разных С++ в природе - как в Бразилии педров.
А билдер у топик стартера не фигурирует.


novex   (2008-12-09 19:56:00) [4]


> Сергей М. ©   (08.12.08 08:49) [2]
> > на C++> TADOConnectionВ С++ нет никаких "TADOConnection".
>


в C++ Builder есть.


KSergey   (2008-12-09 16:46:00) [5]

С Королевства, этот вопрос:

Сообщение от автора вопроса
Все заработало после замены pchar на pansichar. Всем спасибо за поддержку.


KSergey   (2008-12-09 16:45:00) [6]

Автор, вы не привели как функция описана в C++ библиотеке.


GrayFace   (2008-12-09 12:57:00) [7]

> Правильно не работает
Это точно. Правильно делает, что не работает. Не помню, хранит ли Edit текст в переменной, но если не хранит, то строка, которую ты получаешь сразу же уничтажается, т.к. на нее нет ссылок (PChar на счетчик ссылок, естественно, не влияет - он может быть ссылкой на что угодно). Надо делать как МистерТ[6].


oxffff   (2008-12-08 20:27:00) [8]


> Пусть автор утвердит не наличие связи в студии.


Первого канала? :)


Leonid Troyanovsky   (2008-12-08 19:52:00) [9]


> oxffff ©   (08.12.08 11:45) [7]

> И автор не утверждал о наличии связи между С++ и TADOConnection.

Пусть автор утвердит не наличие связи в студии.

--
Regards, LVT.


oxffff   (2008-12-08 11:45:00) [10]


> Сергей М. ©   (08.12.08 09:34) [4]


см. [2]. Утверждение взято с потолка.
И автор не утверждал о наличии связи между С++ и TADOConnection.
см [0].


МистерТ   (2008-12-08 10:39:00) [11]

В D2009 строки стали юникодовыми, поэтому нужно использовать AnsiString и PAnsiChar
Что получится в итоге:
input := Pchar(SynEdit1.Text);
честно даже не знаю, надо бы наверное как-то так
var s : AnsiString;
begin
 s := SynEdit1.Text;
 input := PAnsiChar(s);


Anatoly Podgoretsky   (2008-12-08 10:14:00) [12]


> Ничего не мешает так обозвать тип.

В таком случае описание типа в студию.


Сергей М.   (2008-12-08 09:34:00) [13]


> Ничего не мешает так обозвать тип


Америку ты не открыл.


oxffff   (2008-12-08 09:18:00) [14]


> В С++ нет никаких "TADOConnection".


Ничего не мешает так обозвать тип.


Сергей М.   (2008-12-08 08:49:00) [15]


> на C++


> TADOConnection


В С++ нет никаких "TADOConnection".


Anatoly Podgoretsky   (2008-12-07 22:41:00) [16]

> vaBRAMYAK  (07.12.2008 20:46:00)  [0]

http://www.podgoretsky.com/OtherParts/DM/BadTips.aspxСовет 3


Наверх

Титульная страница Поиск, карта сайта Написать письмо