Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];

Вниз

Как вытащить данные из "экзотического" 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.039 c
14-1099344291
saNat
2004-11-02 00:24
2004.11.21
Украли сотовый.


1-1099554397
alexa
2004-11-04 10:46
2004.11.21
Memo и Label


1-1100091483
Ditrix
2004-11-10 15:58
2004.11.21
хранение GUI в BLOB полях


14-1099520828
Mirror
2004-11-04 01:27
2004.11.21
Куда можно спрятать дату активации проги?


14-1099894188
тихий вовочка
2004-11-08 09:09
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский