Что делает stdole.dll?

Вышеупомянутые ответы хороши, но в моем случае 1-й подход, который преобразует функцию в статическую, не работает. Я пытался преобразовать код выхода, чтобы перейти в функцию потока, но этот код имел множество ссылок на нестатические члены класса. Второе решение инкапсулирования в объект C ++ работает, но имеет 3-уровневые оболочки для запуска потока.

У меня было альтернативное решение, которое использует существующую конструкцию C ++ - функцию «friend», и она отлично работала для моего дело. Пример того, как я использовал «друга» (будет использовать тот же пример для имен, показывающий, как его можно преобразовать в компактную форму с помощью друга)

    class MyThreadClass
    {
    public:
       MyThreadClass() {/* empty */}
       virtual ~MyThreadClass() {/* empty */}

       bool Init()
       {
          return (pthread_create(&_thread, NULL, &ThreadEntryFunc, this) == 0);
       }

       /** Will not return until the internal thread has exited. */
       void WaitForThreadToExit()
       {
          (void) pthread_join(_thread, NULL);
       }

    private:
       //our friend function that runs the thread task
       friend void* ThreadEntryFunc(void *);

       pthread_t _thread;
    };

    //friend is defined outside of class and without any qualifiers
    void* ThreadEntryFunc(void *obj_param) {
    MyThreadClass *thr  = ((MyThreadClass *)obj_param); 

    //access all the members using thr->

    return NULL;
    }

Конечно, мы можем использовать boost :: thread и избегайте всего этого, но я пытался изменить код C ++, чтобы не использовать boost (код был связан с boost именно для этой цели)

39
задан 2 October 2008 в 23:34
поделиться

3 ответа

Кажется, что stdole.dll основной interop блок . См. Office 2003 Primary Interop Assemblies на MSDN.

22
ответ дан artur02 7 July 2019 в 02:44
поделиться

Мне также пришлось добавить ссылку на мой проект для stdole. Несмотря на то, что у меня нет никаких ссылок на него (это простое приложение для изображений), у двух наших пользователей возникали ошибки, которые отсутствовали. Возможно, они использовали только .net 2.0, когда это приложение 3.5. Я понял почему.

Я также зашел, чтобы опубликовать на вкладке свойств проекта, и выбрал Application Files, а затем включил stdole для развертывания. Надеюсь, это сработает.

0
ответ дан 27 November 2019 в 02:53
поделиться

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

Я не знаю, как ссылка на это вообще попала в проект. Это устаревшее приложение, должно быть, было давным-давно.

Саймон

2
ответ дан 27 November 2019 в 02:53
поделиться
Другие вопросы по тегам:

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