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

Вниз

Как вытащить данные из "экзотического" CHAR/PCHAR ?   Найти похожие ветки 

 
Dimedrol ©   (2004-11-01 13:19) [0]

Коллеги, есть данные, которые по утверждению
создателей интерфейса к 1 закрытой DLL(SO) возвращаются в виде
array of strings
там в исходнике (интерфейса) есть кусок -

PMYSQL_ROW = ^MYSQL_ROW;
MYSQL_ROW = char;
{ return data as array of strings  }


Весьма странно (для меня ;-) )
Я подозреваю что это в результате никакой
не CHAR а PCHAR.

Когда я пытаюсь из основной программы обратиться к нему
как к PCHAR, исправив указанные кусок кода,

PMYSQL_ROW = ^MYSQL_ROW;
MYSQL_ROW = PCHAR;
{ return data as array of strings  }

или даже так -

MYSQL_ROW = pchar;
PMYSQL_ROW = MYSQL_ROW; //чтобы не нарушать внутреннюю структуру

то вроде бы что-то получается, но присутствует мусор,
и как будто - не все данные. В общем - лажа какая-то.

Помогите плиз, как в это случае поступить ?


 
clickmaker ©   (2004-11-01 13:28) [1]


> Когда я пытаюсь из основной программы обратиться к нему
>

как пытаешься?


 
VMcL ©   (2004-11-01 13:28) [2]

>>Dimedrol ©  (01.11.04 13:19)

Хм. А с чего это вдруг libMySql.dll стала закрытой?


 
KSergey ©   (2004-11-01 13:47) [3]

А если обращаться как сразу - не получатется? Откуда подозрения-то?
Здесь чувствуется сишная калька, так что не надо додумывать по поводу PChar.

Да и array of strings, подозреваю, надо трактовать вовсе не в смысле паскалевских string ;)


 
Dimedrol ©   (2004-11-01 14:16) [4]

2 clickmaker

Из кода, приведенного в оригинальном примере -

   rowbuf := mysql_fetch_row(recbuf);
   while (rowbuf<>nil) do
   begin

   Writeln  ("(Id: ", rowbuf[0]);
   Writeln  (", Name: ", rowbuf[1]);
   Writeln(", Email : ", rowbuf[2],")");
   
   rowbuf := mysql_fetch_row(recbuf);
   end;


Компилер (FreePas) ругается на rowbuf[0] - говорит - низя так. :-(

а я попробовал так -


var
rowbuf : pchar;
recbuf : PMYSQL_RES;
...

   rowbuf := mysql_fetch_row(recbuf);
   
   Writeln  ("size = ",sizeof(recbuf));
   
   begin
   Writeln  ("OUT = ",string(rowbuf));
   end;


то есть убрал все циклы, чтобы в принципе добраться до данных
и вот что компилер+программа выводит:

[root@Titan mysql]# ./c
Free Pascal Compiler version 1.0.10 [2003/06/26] for i386
Copyright (c) 1993-2003 by Florian Klaempfl
Target OS: Linux for i386
Compiling qtest.pas
qtest.pas(14,5) Note: Local variable COUNT not used
qtest.pas(14,11) Note: Local variable NUM not used
qtest.pas(15,5) Note: Local variable CODE not used
qtest.pas(18,5) Note: Local variable QBUF not used
qtest.pas(27,1) Note: Local variable A not used
qtest.pas(28,1) Note: Local variable AA not used
Assembling qtest
Linking qtest
149 Lines compiled, 0.0 sec
Allocating Space...
Connecting to MySQL...Done.
Connection data:
Mysql_port      : 3306
Mysql_unix_port : /var/lib/mysql/mysql.sock
Host info       : Localhost via UNIX socket
Server info     : Uptime: 1136023  Threads: 1  Questions: 3211834  Slow queries: 0  Opens: 99  Flush tables: 1  Open tables: 64  Queries per second avg: 2.827
Client info     : 4.0.11a-gamma
Selecting Database esubbota...
Executing query : select author, id, header from articles where id=27538 limit 1...
Number of records returned  : 1
Number of fields per record : 3
size = 4
OUT = Ш”@и”@о”@љ@Людмила ВЕВЕРЕ.
Freeing memory occupied by result set...
Closing connection with MySQL.
[root@Titan mysql]#


жирным я отметил, что прога выводит - это имя Автора.
а остальное никак не могу вынуть...

2 VMcL ©
мда...

2KSergey ©
ну а как же тогда нужно "трактовать" ? чтобы данные получить ?
мда...


 
KSergey ©   (2004-11-02 08:03) [5]

> 2KSergey ©
> ну а как же тогда нужно "трактовать" ? чтобы данные получить
> ?

А там сишных прототипов нет случаем? Если есть - приведите здесь.


 
PVOzerski ©   (2004-11-02 09:52) [6]

В исходниках FreePascal, в packages, есть юниты с интерфейсными объявлениями для MySQL. Хотя местами там кое-что устарело, по крайней мере описания типов у меня задействовались успешно и с MySQL 4.


 
Dimedrol ©   (2004-11-02 12:57) [7]

2 PVOzerski ©
У вас есть работающий код на FreePascal
для соединения с MySQL базой и\или выполнения простеньких запросов ?
Если да, то не могли бы вы мне его прислать ?


 
Dimedrol ©   (2004-11-02 12:58) [8]

2 PVOzerski ©
У вас есть работающий код на FreePascal
для соединения с MySQL базой и\или выполнения простеньких запросов ?
Если да, то не могли бы вы мне его прислать ?


 
Dimedrol ©   (2004-11-03 12:10) [9]

точно нет... :-(



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

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

Наверх




Память: 0.47 MB
Время: 0.04 c
14-1099166665
Vaitek
2004-10-31 00:04
2004.11.21
Управление трафиком


3-1098845518
vituha
2004-10-27 06:51
2004.11.21
dBase to Paradox


14-1099056327
SteelMan
2004-10-29 17:25
2004.11.21
Как и сколько зарабытывают будущие программисты(студенты :))


14-1099318213
oldman
2004-11-01 17:10
2004.11.21
Надыбал тут задачку...


14-1099469043
Sergey_Masloff
2004-11-03 11:04
2004.11.21
Визуальное наследование, Суслики(с) и оффтопики в чужих ветках





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский