powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / DLL + Cache = <DYNAMIC LIBRARY LOAD>
7 сообщений из 7, страница 1 из 1
DLL + Cache = <DYNAMIC LIBRARY LOAD>
    #37507173
X_Shooter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Проблема такая. Необходимо подключить к Cache библиотеку libpl.dll.
При попытке воспользоваться функцией $zf(-4) для загрузки dll в терминале возникает ошибка:
USER>s lib=$g(^%SYS("bindir"))_"libpl.dll"

USER>s st=$zf(-4,1,lib)

S st=$ZF(-4,1,lib)
^
<DYNAMIC LIBRARY LOAD>
USER>

Файл libpl.dll находится в каталоге bin. В чем может быть проблема?

cconsole.log сообщает:
1 Error loading dll (c:\intersystems\cache\bin\libpl.dll) is 126

126 - whereas we were expecting %1

Из-за неудачного названия СУБД и спец.символов типа "%" сложно искать в поисковике инфу по проблеме ...
Может кто встречался?
...
Рейтинг: 0 / 0
DLL + Cache = <DYNAMIC LIBRARY LOAD>
    #37507206
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X_Shooter ,

Годится не любая DLL.
Библиотека должна иметь функцию GetZFTable, чтобы её можно было использовать из Caché: Building Callout Modules as Dynamic Shared Libraries
...
Рейтинг: 0 / 0
DLL + Cache = <DYNAMIC LIBRARY LOAD>
    #37526310
X_Shooter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал следующее.

Создал в VisualStudio 2010 C++ проект Win32/DLL.
Добавил в начало следующие строки:

#define ZF_DLL
#include "callin.h"
#include "cdzf.h"
#include "SWI-cpp.h"
#include "SWI-Prolog.h"

Соответственно добавив все необходимые файлы и директории в проект.
Затем добавил функцию вызова цели Пролога (код не мой, взял пример с одного из сайтов):

int ProCall(int argc, char **argv)
{
#ifdef READLINE /* Remove if you don't want readline */
PL_initialise_hook(install_readline);
#endif

if ( !PL_initialise(argc, argv) )
PL_halt(1);

PL_halt(PL_toplevel() ? 0 : 1);
return 1;
}

При компиляции выскакивали ошибки вида
error LNK2019: ссылка на неразрешенный внешний символ _PL_toplevel в функции _ProCall

Сделал по-другому. СОздал обычный (не DLL) C++ проект Win32. Добавил все то же самое. Компиляция успешна. В свойствах проекта изменил тип на DLL. Компиляция успешна, создан DLL-файл.

При попытке вызова в терминале
s st=$zf(-4,1,"TestProlog.dll")
та же ошибка
<DYNAMIC LIBRARY LOAD>

Подскажите, если есть какие-нибудь догадки, в чем дело, или какие-нибудь другие варианты.
...
Рейтинг: 0 / 0
DLL + Cache = <DYNAMIC LIBRARY LOAD>
    #37526903
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X_Shooter ,

Начните с примеров в \<install-dir>\dev\cache\callin .

Например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
#define _CRT_SECURE_NO_WARNINGS
#define ZF_DLL

#include <stdio.h>
#include "cdzf.h" 
#include <string.h>

extern int test();

ZFBEGIN
ZFENTRY("TEST","ipcfdIPCFD",test)
ZFEND

int test(int a,int *b,char *c,float *d,double *e,int f,int *g,char *h,float *i,double *j)
{
  printf("Input parameters: %d %d %s %g %g\r\n",a,*b,c,*d,*e);
  printf("Output parameters: %d %d %s %g %g\r\n",f,*g,h,*i,*j);
  f =  5 ;
  *g =  6 ;
  strcpy(h,"This is a test");
  *i =  1 .5e8;
  *j =  1234567890 . 123456789 ;
  fflush(stdout);
  return  0 ;
}

  #dim ex As %Exception.AbstractException
  set a=1
  set b=2
  set c="test_c"
  set d=4.5
  set e=2.45
  
  set f=11
  set g=22
  set h="test_h"
  set i=3.77
  set j=1.34e4
  try{
    set res=$ZF(-3,"mycallout.dll","TEST",a,b,c,d,e,f,g,h,i,j)
    w "res=",res,!
  }catch ex{
    write $system.Status.GetErrorText(ex.AsStatus(),"ru"),!
  }
  do $ZF(-3,"")

В терминале:

Код: plaintext
1.
2.
3.
USER>do ^test
Input parameters: 1 2 test_c 4.5 2.45
Output parameters: 11 22 test_h 3.77 13400
res=11,6,This is a test,150000000,1234567890.123456717
...
Рейтинг: 0 / 0
DLL + Cache = <DYNAMIC LIBRARY LOAD>
    #37790135
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

как вы бл* пишете на этом си++ ?

в Microsoft Visual Studio 2010 создал проект Win32 библиотека DLL
назвал dll
и в файл dll.cpp копипастом вставил вот этот ваш код

компилятор ругается:
error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "StdAfx.h"" в источник.


Если добавить строчку #include "StdAfx.h" то ошибок становится 12

содержимое StdAfx.h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
#pragma once

#include "targetver.h"

#define WIN32_LEAN_AND_MEAN             // Исключите редко используемые компоненты из заголовков Windows
// Файлы заголовков Windows:
#include <windows.h>
...
Рейтинг: 0 / 0
DLL + Cache = <DYNAMIC LIBRARY LOAD>
    #37790253
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
u78 ,

Исходники callout решения.
Тестировал на Caché 2012.2.FT3 для обеих платформ: x86 и x64.
...
Рейтинг: 0 / 0
DLL + Cache = <DYNAMIC LIBRARY LOAD>
    #37790527
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

спасибо тебе добрый человек, всё отлично работает
теперь прикручу вызов C# проектов из этой mycallout и вперёд и с песней
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / DLL + Cache = <DYNAMIC LIBRARY LOAD>
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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