Задать вопрос
Профиль пользователя заблокирован сроком «навсегда» без указания причины
  • Получение денег с юзеров сайта. Как?

    @MikhailEdoshin
    У вас именно зарубежные покупатели и общий договор типа оферты? Были ли проблемы с валютным контролем и паспортом сделки?
  • Подключение dll к проекту Visual Studio 2010 (C++)

    @MikhailEdoshin
    Если extern "C" не прописан, сейчас уже бессмысленно его прописывать. Это инструкция компилятору экспортировать одно только имя функции как оно есть (добавив только _ спереди) и не засовывать туда типы арументов и результата, чтобы можно было различать перегруженные функции. Если это не сделано при компиляции (а это не сделано), то имена уже не такие. Кроме того, у вас тут еще и классы имеются — их вообще нельзя в стиле С экспортировать. (Если нужно работать с С++ классом из С, обычно приходится писать раздельные заголовки, объявляя класс как структуру, давая другие сигнатуры функций — что-то вроде такого.)

    Я несколько сомневаюсь, что автор библиотеки дает вам правильный совет. Хотя раз он так уверенно говорит, вдруг у него есть и C-интерфейс? Посмотрите, может быть в заголовочном файле уже есть extern "C", а среди невнятных имен, которые выдает dumpbin, есть называния таких функций? Если так, то да, эти имена вы сможете подцепить через def-файл и ссылка которую он приводит, как раз в тему.

    Но если этого нет, то я очень удивлюсь, если проблема вдруг решится с помощью def-файла. Вот, например, страничка MinGW, описывающая, как создать DLL. Обратите внимание, что они используют extern "C" там, где могут, что пишут далее, что функция, не объявленная таким образом и C++ класс не будут доступными при вызове из другой среды (например, MS VC++):

    The important and often overlooked consequence of this is that from the above DLL only the functions hello(const char *) and Double(int) are seamlessly callable from e.g. MS VC++ while CppFunc(void) is not (assuming the DLL is created by MinGW).

    A similar statement goes for C++ classes exported in a DLL, i.e. for the class MyClass. For further reading search the Web for the keyword «ABI» and possible in conjunction with «C++».

    Обратите внимание на «assuming the DLL is created by MinGW» — подразумевается, что если DLL будет скомпилирована MS VC++, то функция и класс будут доступны. Или, как они далее советуют, можно либо навертеть COM-объект, либо создать обертку в C-стиле:

    A way to circumvent this problem is either using COM or create C-style wrapper functions to encapsulate the C++ ABI.
  • Подключение dll к проекту Visual Studio 2010 (C++)

    @MikhailEdoshin
    А на вопрос-то я и не ответил: def-файл нужен для lib.exe, чтобы сделать .lib, обертку над DLL. См. первый пример в начальном ответе. MinGW, возможно, мог бы его использовать при линковке объектных файлов, но у вас не тот случай.
  • Подключение dll к проекту Visual Studio 2010 (C++)

    @MikhailEdoshin
    Вы знаете, скорее всего, ничего не выйдет. Может быть, конечно, что-то и выйдет, но шансы небольшие. Проблема в том, что библиотека экспортирует непосредственно С++ символы. У C++, в отличие от C не стандартизован ABI (application binary interface) и разные компиляторы реализуют его по-разному. То есть когда код, скомпилированный MS-компилятором, получит объект из кода, скомпилированного MinGW, очень может быть, что внутренняя его структура будет не такой, которую предполагает MS компилятор. Хотя объявления у объектов вроде бы одни и те же. Соответственно, работать с ним он не сможет.

    Вроде бы Borland C++ в свое время озаботился тем, чтобы его C++ ABI совпадал с MS; в результате его C++ DLL можно было использовать с MS-продуктами и наборот. Что до GCC, у него даже между версиями ABI не совпадает. Добро пожаловать в C++, v2 :)

    То есть даже если побороть name mangling, толку это не даст. Вариант только перекомпилировать dll под Visual Studio. Или на mingw сделать оболочку, чтобы завернуть C++ в обычный C.
  • Вопросы по GPL?

    @MikhailEdoshin
    Или даже динамически определять, есть ли xmpppy, и в зависимости от этого предоставлять дополнительные возможности. Например, многие не-GPL программы (Python, sqlite) используют GNU readline, если она есть, хотя readline распространяется под GPL. Главное, чтобы помимо xmpppy был полезный функционал.
  • Подключение dll к проекту Visual Studio 2010 (C++)

    @MikhailEdoshin
    Ну вот Ei — это тип параметра int, а Evvoid. Но, по-моему, это не Microsoft'овский компилятор. Что-то даже с примерным описанием разных схем name mangling трудно сказать, чем это собрано. Вроде похоже на GCC, но не совсем.

    Беда в том, что микрософтовские инструменты этого не поймут, потому как по тем же объявлениям будут искать функции с другим (своим) стилем name mangling. Добро пожаловать в C++ :) Единственный вариант, который можно попробовать — переопределять имена. Т. е. делать .lib так:

    lib.exe /EXPORT:<имя в MS-стиле>=<реальное имя> mylib.dll

    Попробуйте сначала с одной простой функцией. Чтобы выяснить имя в MS-стиле, можно написать свою (пустую) реализацию этой же библиотеки, скомпилировать ее в Visual Studio, и посмотреть, что выходит. Ну или аналитическим путем.
  • Подключение dll к проекту Visual Studio 2010 (C++)

    @MikhailEdoshin
    Да, тут у них даже в чем-то удобная система. Лично, правда, пользоваться не приходилось, не знаю, насколько полезная.
  • Прием платежей у западных пользователей

    @MikhailEdoshin
    Я так понял, что эта опция включается по запросу для коммерческих счетов — в их мануале (PDF), раздел 3.2 Quick Checkout.
  • Прием платежей у западных пользователей

    @MikhailEdoshin
    Кстати, у Moneybookers есть опция 100% fraud protection — за существенный процент, конечно.
  • Прием платежей у западных пользователей

    @MikhailEdoshin
    У Moneybookers для коммерсантов вроде бы есть специальный режим Quick Checkout, не требующий регистрации покупателя в Moneybookers. А так да, очень параноидальная контора.
  • Есть ли ИП на УСН, продающие коробочное ПО за границу?

    @MikhailEdoshin Автор вопроса
    У них уточнять трудно :) Но попробую.
  • Как отучить стажёра от говнокода?

    @MikhailEdoshin
    Так это он еще и университет умудрился таким макаром закончить?! Мне кажется, тут уже поздно что-то делать.
  • Использование Win32 версии Poppler-qt4?

    @MikhailEdoshin
    То есть вы код Poppler'а правите, что ли? :) Это последнее средство, конечно. Лучше все остальные сначала испробовать. Сейчас ругается, что видит объявленный символ (из Poppler'овского .h-файла), но не находит его в предложенных к линковке объектных файлах и библиотеках. Похоже на то, что просто библиотеки нет в списке линковки.
  • Вопрос по XPath2

    @MikhailEdoshin
    Только obxLevel[2], раз для второго.
  • Xcode и номер версии iPhone SDK в путях - как с этим жить правильно?

    @MikhailEdoshin
    В SDKs лежат системные библиотеки и прямого пути к ним в скрипте в любом случае быть не должно — нужно или опцию указывать или переменную окружения. То есть уже сейчас можно убрать эти пути, и вставить, скажем -miphoneos-version-min=4.2. Другой вопрос, как менять это 4.2 на другое значение.

    Я, признаться, не совсем понимаю, зачем его менять на разных машинах — разве не правильнее билдить под минимальную подходяющу версию? Но допустим, нужно менять — тогда, наверное, правильнее создавать build configuration, где указывать target SDK. Если часть билда идет скриптом, он может считывать XCode variables из окружения.
  • Несколько вопросов знатокам Python?

    @MikhailEdoshin
    Хм. Ну как сказать «другой». Вот цитата с официального сайта:
    Cython is a language that makes writing C extensions for the Python language as easy as Python itself. Cython is based on the well-known Pyrex, but supports more cutting edge functionality and optimizations.

    The Cython language is very close to the Python language, but Cython additionally supports calling C functions and declaring C types on variables and class attributes. This allows the compiler to generate very efficient C code from Cython code.

    This makes Cython the ideal language for wrapping external C libraries, and for fast C modules that speed up the execution of Python code.

    То есть, во-первых, он предназначен для написания модулей для Питона (либо самостоятельных, либо для работы с существующими библиотеками на C), а во-вторых, его синтаксис очень близок к Питону (настолько, что некоторые умельцы даже умудряются писать его так, что получают либо обычный код, конвертируемый в байткод, либо код на C — была даже статья на Хабре). То есть он, конечно, «другой», но не «вообще другой».
  • Генерация простого числа заданного размера?

    @MikhailEdoshin
    «Дешевле»? Предположим только каждое 100000000000000000000000000000000000000-е число простое. Тогда у нас будет 2^1024 / 100000000000000000000000000000000000000 = (разобью по 30 цифр, чтобы влезло) 179769313486231590772930519078 902473361797697894230657273430 081157732675805500963132708477 322407536021120113879871393357 658789768814416622492847430639 474124377767893424865485276302 219601246094119453082952085005 768838150682342462881473913110 540827237163350510684586298239 9 простых чисел. Well, go ahead :)
  • Генерация простого числа заданного размера?

    @MikhailEdoshin
    И еще — getrandbits() и randint() импортированы из random.
  • Генерация простого числа заданного размера?

    @MikhailEdoshin
    И, собственно, RSA:

    def rsa(message, key):
        """
        rsa(message, key) -> transformed message
        Apply RSA transformation to the message.
        """
        n, e = key
        if n < message:
            raise ValueError('the message is longer than the key')
        return mod_exp(message, e, n)