|
|
|
BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)
|
|||
|---|---|---|---|
|
#18+
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)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2018, 16:58 |
|
||
|
BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)
|
|||
|---|---|---|---|
|
#18+
OCI Documentation https://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_externproc.htm#ADFNS724 Parameter Data Type Mappings for external functions https://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_externproc.htm#ADFNS724 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2018, 17:09 |
|
||
|
BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)
|
|||
|---|---|---|---|
|
#18+
AviffВопрос: как реализовать передачу BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)? Выделяешь память, вычитываешь туда содержимое блоба, передаёшь. Обратный процесс аналогичен. В чём проблема-то? Программиста под рукой нет?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2018, 17:10 |
|
||
|
BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, лучше какой кусок кода написал, или совет по реализации, а так просто отметится то и я могу, чего стоит под постом по ламерски написать очевидные вещи =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 12:02 |
|
||
|
BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)
|
|||
|---|---|---|---|
|
#18+
1) Я лет 15 назад на OCI программировал. Но на клиенте (а не в External procedures), да и исходников нынче уже нет c OCI - идут примеры, в том числе, и по работе с BLOB единственное, я так понимаю, external procedure нужно будет объявлять "with context." А собственно код за Вас все равно никто писать не будет, т.ч. тут Dimitry Sibiryakov совершенно прав. 2) Если данные нужно передавать "короткие" (<16 Kb), то вполне можно использовать varchar2 + кодировать бинарную информацию через HEXTORAW, RAWTOHEX. Просто, понятно и проблем быть не должно. Тогда никакой OCI требоваться не будет. чистый C. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 12:12 |
|
||
|
BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, просто вчера я писал на скорую руку и всех подробностей не описал, я начинающий разработчик ORACLE APEX на С++ я покашто не умею кодить, но задачку нужно выполнить, есть ряд маленьких вопросов: - ОРАКЛ может ложить БЛОБ в оперативку? (я незнаю, думаю что нет) - порционно из ОРАКЛа кидать или перекинуть весь БЛОБ и в С++ порционно в оперативку кидать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 12:39 |
|
||
|
BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 13:22 |
|
||
|
BLOB(ORACLE) --> PBYTE(C++ DLL) --> BLOB(ORACLE)
|
|||
|---|---|---|---|
|
#18+
Aviffя начинающий разработчик ORACLE APEX на С++ я покашто не умею кодить, но задачку нужно выполнить, Бесперспективняк. Aviffперекинуть весь БЛОБ и в С++ порционно в оперативку кидать? Да. С OCILobLocator-ом иначе работать и невозможно, а ничего другого ты не получишь в Сишном коде. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2018, 14:06 |
|
||
|
|

start [/forum/topic.php?fid=52&tid=1883797]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
161ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 438ms |

| 0 / 0 |
