Преобразуйте статическую библиотеку окон в dll

При работе с бинарными данными вам нужно как можно больше стараться оставаться в бинарном режиме, тем более что нет гарантии, что выбранная вами кодировка строки в любом случае может представлять все значения.

Просто помните, что bytes объекты в основном представляют собой списки 8-битных целых чисел без знака, даже если они имеют удобный строковой синтаксис b'xyz'.

filein = "download.jpeg"
fileout = "glitch.jpg"

with open(filein, "rb") as rd:
    img = rd.read()
    # We can happily crash here if there's no FFDA; 
    # that means we're not able to process the file anyway
    prelude, marker, scanimg = img.partition(b"\xff\xda")
    scanglitch = []

    for letter in scanimg:  # scanimg is a list of integers, so we have to use `ord()`
        if letter != ord("a"):
            scanglitch.append(letter)
        else:
            scanglitch.append(ord("e"))

with open(fileout, "wb") as wr:
    wr.write(prelude)
    wr.write(marker)
    wr.write(bytes(scanglitch))

(Я знаю, что логика замены может быть написана как понимание списка, но я подумал, что это будет более дружелюбно, как это.)

12
задан jb. 6 September 2014 в 09:24
поделиться

2 ответа

Мне не известны какие-либо инструменты, которые будут делать это автоматически, но процесс заключается в создании проекта DLL и добавлении ваших библиотек в проект. Для каждой функции в заголовочном файле:

int SomeLibFunc( int x, int y );

вам нужно будет создать и экспортировать свою собственную функцию в DLL;

int MyFunc( int x, int y ) {
   return SomLibFunc( x, y );
}

Процесс довольно механический, и вы можете создать сценарий, используя что-то вроде perl для создания исходные файлы DLL.

13
ответ дан 2 December 2019 в 19:32
поделиться

Если у вас нет доступа к источнику, вы можете просто создать DLL-оболочку, которая экспортирует необходимые вам функции и делегирует их статической библиотеке.

4
ответ дан 2 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: