2014 dxdy logo

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

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




 
 Как подключить библиотеку dll в свою программу на js
Сообщение21.02.2025, 14:47 
Здравствуйте. Скачал с гитхаба библиотеку. Нашел куда к себе скачал - 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 
За весь день сегодня я понял, что в 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 
взял вот этот код
Код:
```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 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group