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

Вниз

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

 
vaBRAMYAK   (2008-12-07 20:46) [0]

Здравствуйте! Нужна помощь!
Есть библиотека 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;

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


 
Anatoly Podgoretsky ©   (2008-12-07 22:41) [1]

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

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


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


> на C++


> TADOConnection


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


 
oxffff ©   (2008-12-08 09:18) [3]


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


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


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


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


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


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


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

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


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

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


 
oxffff ©   (2008-12-08 11:45) [7]


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


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


 
Leonid Troyanovsky ©   (2008-12-08 19:52) [8]


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

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

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

--
Regards, LVT.


 
oxffff ©   (2008-12-08 20:27) [9]


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


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


 
GrayFace ©   (2008-12-09 12:57) [10]

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


 
KSergey ©   (2008-12-09 16:45) [11]

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


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

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

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


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


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


в C++ Builder есть.


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


> novex   (09.12.08 19:56) [13]


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


 
Riply ©   (2008-12-09 21:13) [15]

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

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


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


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


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



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

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

Наверх




Память: 0.5 MB
Время: 0.015 c
1-1228851112
Tack
2008-12-09 22:31
2009.12.20
Как открыть длинный URL в браузере?


15-1255897809
Юрий
2009-10-19 00:30
2009.12.20
С днем рождения ! 19 октября 2009 понедельник


1-1229474391
Jack
2008-12-17 03:39
2009.12.20
Использование TCLIENTDATASET без провайдера


15-1255984915
DmitriyG.
2009-10-20 00:41
2009.12.20
Кто каким средством пользуется для создания Help?


2-1257255804
@!!ex
2009-11-03 16:43
2009.12.20
Подскажите контрол для реализации слоев