powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)
8 сообщений из 8, страница 1 из 1
BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)
    #39665465
Aviff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
26 июня отредактирую.

У меня есть С++(WIN) библиотека которая очень часто на вход хочет PBYTE.
Если я правильно понял то это "адрес на массив байт в оперативной памяти", чего ORACLE делать не умеет, редактировать библиотеку не могу, есть мысль сделать промежуточную библиотеку-переводчик.
---
Я через ExtProc подключаю библиотеку-DLL

#include "stdafx.h"
#include "iostream"
#include "string"
#include "Windows.h"

HINSTANCE libDLL = LoadLibrary(L"C:\\Users\\User\\source\\repos\\Dll2\\Debug\\Dll2.dll");

// Оглашение типа для функции
typedef DWORD (WINAPI *WA_CHECK_FILE)(
PBYTE pbFile // Входящий. Файл для проверки в виде массива байт
);

int main()
{
WA_CHECK_FILE WA_CheckF = (WA_CHECK_FILE)GetProcAddress(libDLL, "WACheckFile");
return WA_CheckF( BLOB );
}

---
Резюмируя повторю: Я хочу сделать промежуточную библиотеку которая будет принимать от ORACLE BLOB и ложить его в оперативку, и передавать дальше PBYTE в библиотеку С++ и обратно.

Вопрос: как реализовать передачу BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)?
...
Рейтинг: 0 / 0
BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)
    #39665477
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)
    #39665478
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AviffВопрос: как реализовать передачу BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)?

Выделяешь память, вычитываешь туда содержимое блоба, передаёшь. Обратный процесс
аналогичен. В чём проблема-то? Программиста под рукой нет?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)
    #39665894
Aviff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
лучше какой кусок кода написал, или совет по реализации,
а так просто отметится то и я могу,
чего стоит под постом по ламерски написать очевидные вещи =)
...
Рейтинг: 0 / 0
BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)
    #39665906
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1)
Я лет 15 назад на OCI программировал. Но на клиенте (а не в External procedures), да и исходников нынче уже нет
c OCI - идут примеры, в том числе, и по работе с BLOB
единственное, я так понимаю, external procedure нужно будет объявлять "with context."

А собственно код за Вас все равно никто писать не будет, т.ч. тут Dimitry Sibiryakov совершенно прав.

2)
Если данные нужно передавать "короткие" (<16 Kb), то вполне можно использовать varchar2 + кодировать бинарную информацию через HEXTORAW, RAWTOHEX. Просто, понятно и проблем быть не должно. Тогда никакой OCI требоваться не будет. чистый C.

IMHO & AFAIK
...
Рейтинг: 0 / 0
BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)
    #39665929
Aviff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

просто вчера я писал на скорую руку и всех подробностей не описал,
я начинающий разработчик ORACLE APEX
на С++ я покашто не умею кодить, но задачку нужно выполнить,

есть ряд маленьких вопросов:
- ОРАКЛ может ложить БЛОБ в оперативку? (я незнаю, думаю что нет)
- порционно из ОРАКЛа кидать или перекинуть весь БЛОБ и в С++ порционно в оперативку кидать?
...
Рейтинг: 0 / 0
BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)
    #39665975
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aviff- ОРАКЛ может ложить БЛОБ в оперативку? (я незнаю, думаю что нет)

Любые данные перед обработкой на современных классических компьютерах "кладутся в оперативку" - т.ч. да, наверное может )))

Aviff- порционно из ОРАКЛа кидать или перекинуть весь БЛОБ и в С++ порционно в оперативку кидать?

1)
Можно сделать External procedure принимающую BLOB (в C - OCILOBLOCATOR), потом используя ф-ции OCI "вычитать"/получить содержимое Blob'а

2)
Маленькие порции данных, можно передавать или как RAW или как строки varchar2 (HEXTORAW, RAWTOHEX)

Насчет HEXTORAW, RAWTOHEX, тут я немного перестраховался. Т.к. у Вас External procedure, то у Вас НЕ должно быть проблем и с обычным RAW. (см. ниже)

У меня есть С++(WIN) библиотека которая очень часто на вход хочет PBYTE.
Если я правильно понял то это "адрес на массив байт в оперативной памяти", чего ORACLE делать не умеет УМЕЕТ


Массив байт в Oracle называется RAW. (размер RAW ограничен 32 K в PL/SQL)

Если верить табличке маппинга, в External procedure так и передается, как unsigned char * т.е. PBYTE

Т.ч. Oracle - УМЕЕТ.

IMHO & AFAIK
...
Рейтинг: 0 / 0
BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)
    #39666019
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aviffя начинающий разработчик ORACLE APEX
на С++ я покашто не умею кодить, но задачку нужно выполнить,

Бесперспективняк.

Aviffперекинуть весь БЛОБ и в С++ порционно в оперативку кидать?
Да. С OCILobLocator-ом иначе работать и невозможно, а ничего другого ты не получишь в
Сишном коде.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]