![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов функции из 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