Текущий архив: 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.011 c