Главная страница
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.49 MB
Время: 0.025 c
14-1099639552
eukar
2004-11-05 10:25
2004.11.21
Простая школьная задачка


1-1099484746
dolphin
2004-11-03 15:25
2004.11.21
Создание курсора


14-1099666667
quickblack
2004-11-05 17:57
2004.11.21
Как открыт php файл?


8-1085210742
Rif
2004-05-22 11:25
2004.11.21
Подскажите как из AVI файла вытянуть второй поток звука.


4-1097089653
maxz
2004-10-06 23:07
2004.11.21
неубиваемый процесс