2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Как подключить библиотеку dll в свою программу на js
Сообщение21.02.2025, 14:47 


12/03/17
698
Здравствуйте. Скачал с гитхаба библиотеку. Нашел куда к себе скачал - C:\Windows\System32\node_modules\@prebuilt-tdlib\win32-x64\tdjson.dll

Там в разделе Getting Started есть такие строки

Код:
const tdl = require('tdl')

// If libtdjson is not present in the system search paths, the path to the
// libtdjson shared library can be set manually, e.g.:
//   tdl.configure({ tdjson: '/usr/local/lib/libtdjson.dylib' })
// The library directory can be set separate from the library name,
// example to search for libtdjson in the directory of the current script:
//   tdl.configure({ libdir: __dirname })


а в разделе Requirements такие:

Цитата:
The tdjson shared library (libtdjson.so on Linux, libtdjson.dylib on macOS, tdjson.dll on Windows)


Из второго я понял, что для Windows нужно искать tdjson.dll, а из первого механизм подгрузки, если знаю в какой папке это лежит. В итоге у меня получилось следующие строки:

Код:
const tdl = require('tdl')
//tdl.configure({ tdjson: 'C:\Windows\System32\node_modules\@prebuilt-tdlib\win32-x64\tdjson.dll' })
tdl.configure({ libdir: __dirname })


Что по закомментированной строке (когда я пытался сослаться на то место, куда скачалось), что по незакомментированной (когда я перетащил этот dll на рабочий стол) консоль выдала следующее:

Цитата:
C:\Users\Евгений>node C:\Users\Евгений\Desktop\getchat.js
node:internal/modules/cjs/loader:1228
throw err;
^

Error: Cannot find module 'tdl'
Require stack:
- C:\Users\Евгений\Desktop\getchat.js
at Function._resolveFilename (node:internal/modules/cjs/loader:1225:15)
at Function._load (node:internal/modules/cjs/loader:1055:27)
at TracingChannel.traceSync (node:diagnostics_channel:322:14)
at wrapModuleLoad (node:internal/modules/cjs/loader:220:24)
at Module.require (node:internal/modules/cjs/loader:1311:12)
at require (node:internal/modules/helpers:136:16)
at Object.<anonymous> (C:\Users\Евгений\Desktop\getchat.js:4:13)
at Module._compile (node:internal/modules/cjs/loader:1554:14)
at Object..js (node:internal/modules/cjs/loader:1706:10)
at Module.load (node:internal/modules/cjs/loader:1289:32) {
code: 'MODULE_NOT_FOUND',
requireStack: [ 'C:\\Users\\Евгений\\Desktop\\getchat.js' ]
}

Node.js v22.14.0

Получается, она никак не хочет видеть этот tdl. Подскажите, пожалуйста, как правильно подгружать в код библиотеки dll

 Профиль  
                  
 
 Re: Как подключить библиотеку dll в свою программу на js
Сообщение21.02.2025, 16:36 


12/03/17
698
За весь день сегодня я понял, что в require('tdl') нужно вбивать путь. Просто само по себе 'tdl' ничего не значит (точнее значит в том случае, когда все лежит там, где нужно. Но, "где нужно", я понятия не имею). Путь в виде 'C:\Windows\System32\node_modules\@prebuilt-tdlib\win32-x64\tdjson.dll' тоже ничего мне не дает. Вбивать в это поле всевозможные комбинации букв в надежде на успех - тоже сомнительное предприятие. Пожалуйста, высказывайте свои предположения, что можно попробовать, чтобы победить это require('что то там') и добиться хоть какого то взаимодействия с библиотекой, кроме того, что "библиотека не найдена"

-- 21.02.2025, 16:46 --

Что, вообще, означает эта структура require в js, как она функционирует? Я так понимаю, что это не относится к конкретно этой библиотеке. Это что то более общее, предназначенное для подключения библиотек к коду на js?

-- 21.02.2025, 17:02 --

Цитата:
## Usage

The `prebuilt-tdlib` package exports a single function `getTdjson`, which
returns the path to the `tdjson` shared library.

```javascript
const { getTdjson } = require('prebuilt-tdlib')
console.log(getTdjson())
// Prints a path like:
// '/home/user/proj/node_modules/@prebuilt-tdlib/linux-x64-glibc/libtdjson.so'
```

This package can be used with, for example, [`tdl`][tdl]. You can pass the
path to `tdl.configure` (since tdl v7.3.0):

[tdl]: https://github.com/eilvelia/tdl

```javascript
const tdl = require('tdl')
const { getTdjson } = require('prebuilt-tdlib')
tdl.configure({ tdjson: getTdjson() })
// ...
```

The pre-built libraries can also be extracted and used with any other library
or programming language.


вот что это за путь такой - '/home/user/proj/node_modules/@prebuilt-tdlib/linux-x64-glibc/libtdjson.so'? В винде какой у него аналог? Ведь нету же в винде никакого home

-- 21.02.2025, 17:04 --

И, вообще, у меня файл скрипта, к которому я пытаюсь библиотеку подключить лежит на рабочем столе. Вот что есть home для папки рабочего стола?

-- 21.02.2025, 17:12 --

У меня вот этот код:
Цитата:
const { getTdjson } = require('prebuilt-tdlib')
console.log(getTdjson())

ничего подобного не печатает. А печатает стандартное:
Цитата:
C:\Users\Евгений>node C:\Users\Евгений\Desktop\ttt.js
Skillbox test
node:internal/modules/cjs/loader:1228
throw err;
^

Error: Cannot find module 'prebuilt-tdlib'

 Профиль  
                  
 
 Re: Как подключить библиотеку dll в свою программу на js
Сообщение21.02.2025, 18:24 


12/03/17
698
взял вот этот код
Код:
```javascript
const { getTdjson } = require('prebuilt-tdlib')
console.log(getTdjson())
// Prints a path like:
// '/home/user/proj/node_modules/@prebuilt-tdlib/linux-x64-glibc/libtdjson.so'
```

и создал на его основе файлик на рабочем столе ttt.js:
Код:
console.log("Skillbox test");
const { getTdjson } = require('C:\Windows\System32\node_modules\@prebuilt-tdlib\win32-x64\tdjson.dll')
console.log("Viktory");
console.log(getTdjson())

Запустил. Консоль выдала такое:
Цитата:
C:\Users\Евгений>node C:\Users\Евгений\Desktop\ttt.js
Skillbox test
node:internal/modules/cjs/loader:1228
throw err;
^

Error: Cannot find module 'C:WindowsSystem32
ode_modules@prebuilt-tdlibwin32-x64 djson.dll
'
Require stack:

Получается ошибка в слешах. Они коверкают мою строку пути. В итоге "модуль не найден".
Поставил двойные слеши
Код:
console.log("Skillbox test");
const { getTdjson } = require('C:\\Windows\\System32\\node_modules\\@prebuilt-tdlib\\win32-x64\\tdjson.dll')
console.log("Viktory");
console.log(getTdjson())

консоль выдала:
Цитата:
C:\Users\Евгений>node C:\Users\Евгений\Desktop\ttt.js
Skillbox test
C:\Windows\System32\node_modules\@prebuilt-tdlib\win32-x64\tdjson.dll:1
MZ�


SyntaxError: Invalid or unexpected token
at wrapSafe (node:internal/modules/cjs/loader:1486:18)
at Module._compile (node:internal/modules/cjs/loader:1528:20)
at Object..js (node:internal/modules/cjs/loader:1706:10)
at Module.load (node:internal/modules/cjs/loader:1289:32)
at Function._load (node:internal/modules/cjs/loader:1108:12)
at TracingChannel.traceSync (node:diagnostics_channel:322:14)
at wrapModuleLoad (node:internal/modules/cjs/loader:220:24)
at Module.require (node:internal/modules/cjs/loader:1311:12)
at require (node:internal/modules/helpers:136:16)
at Object.<anonymous> (C:\Users\Евгений\Desktop\ttt.js:3:23)

Node.js v22.14.0

Результат, конечно, ненамного лучше. Но хотя бы уже другой. День прожит не зря
... т.к. до "Viktory" дело не дошло, значит обвалилось все во второй строке

-- 21.02.2025, 18:43 --

УРРРААА!!!!
Консоль выдала
Цитата:
C:\Users\Евгений>node C:\Users\Евгений\Desktop\ttt.js
Skillbox test
Viktory
C:\Windows\System32\node_modules\@prebuilt-tdlib\win32-x64\tdjson.dll

Пойду нажрусь :D

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group