0 / 0 / 1
Регистрация: 14.12.2008
Сообщений: 15

Ошибка линкера, связанная с GUID

20.03.2009, 18:01. Показов 2292. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется заголовочный файл с определениями идентификаторов myGUIDS.h :
C++
1
2
3
4
5
6
DEFINE_GUID(IID_IFILE, 
0x4053d276, 0x7227, 0x464d, 0xb4, 0xd5, 0x98, 0x1e, 0xba, 0xbe, 0x3b, 0x3e);
DEFINE_GUID(IID_IFIND, 
0x486a2fdf, 0x6923, 0x49d9, 0x9e, 0x30, 0xd0, 0x18, 0x3f, 0x1, 0x3e, 0x4a);
DEFINE_GUID(IID_IMANAGE, 
0x56a4b2bb, 0xaf7b, 0x4358, 0x89, 0xb8, 0xe1, 0xb2, 0x1a, 0x4d, 0x68, 0x0);
файл инклудится в другом файле с классом, который реализует нужные интерфейсы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#pragma once
#include "interfaces.h"// содержит описание интерфейсов
#include "myGUIDS.h"
#include <vector>
#include <string>
#include <iostream>
using namespace std;
 
class DICTIONARY:public IFile,public IFind, public IManage
{
private:
    vector<string> m_vWords;
    vector<string> m_vDescriptions;
    int m_nRefCounter;
public:
    DICTIONARY():m_nRefCounter(0){}
    ~DICTIONARY(){m_vWords.clear(); m_vDescriptions.clear();}
public:   //implements IUnknown
    STDMETHODIMP QueryInterface(const IID &riid,void **ppvObject);
    STDMETHODIMP_(ULONG) AddRef(){++m_nRefCounter;}
    STDMETHODIMP_(ULONG) Release(){--m_nRefCounter; if (m_nRefCounter<=0) delete this;}
public:   //implements IFile
    STDMETHODIMP Load(istream& inDict);
    STDMETHODIMP Save(ostream& outDict);
public:   //implements IFind
    STDMETHODIMP FindDescription(char* strWord,char* strFound);
public:   //implements IManage
    STDMETHODIMP Add(char* strWord,char* strDescr);
    STDMETHODIMP Del(char* strWord);
};
вообще эти идентификаторы юзаются только в методе QueryInterface():
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
STDMETHODIMP DICTIONARY::QueryInterface(const IID &riid, void **ppvObject)
{
    *ppvObject=NULL;
    if (riid==IID_IFILE)
        *ppvObject=(IFile*)this;
    if (riid==IID_IFIND)
        *ppvObject=(IFind*)this;
    if (riid==IID_IMANAGE)
        *ppvObject=(IManage*)this;
    if (riid==IID_IUnknown)
        *ppvObject=(IUnknown*)(IFile*)this;
    if (*ppvObject)
    {
        ((IUnknown*)(IFile*)*ppvObject)->AddRef();
        return (HRESULT)1;
    }
    return (HRESULT)0;
}
При билдинге линкер выдает три ошибки:
unresolved external symbol _IID_IFILE
unresolved external symbol _IID_IFIND
unresolved external symbol _IID_IMANAGE
ВОПРОС: Чего хочет линкер? как я понимаю надо как-то переобъявить эти идентификаторы в файле класса. но как - не знаю, подскажите плиз)
ЗЫ. Еще непонятно, почеу линкер выдает имена идентификаторов со знаком подчеркивания перед ними - может в этом проблема?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.03.2009, 18:01
Ответы с готовыми решениями:

Ошибка линкера
Здравствуйте. Написал первую программу на ассемблере, &quot;Hello, world&quot;. CSEG segment org 100h Begin: mov ah,9 mov dx, offset...

Ошибка линкера
#include &lt;fstream&gt; using namespace std; template &lt;class T&gt; class A { T i; public: friend ofstream&amp; operator&lt;&lt;(ofstream&amp;...

Ошибка линкера
Здравствуйте! Подскажите пожалуйста в чем здесь дело? Объявил extern указатели в файле .h, а использую в main.cpp, и компилятор постоянно...

2
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
20.03.2009, 18:15
а если местами поменять?
#include "myGUIDS.h"

#include "interfaces.h"// содержит описание интерфейсов
0
0 / 0 / 1
Регистрация: 14.12.2008
Сообщений: 15
20.03.2009, 18:24  [ТС]
Все равно матюгается, собака)
В общем проблему решил - переписал определения GUID'ов в такой вид
C++
1
2
3
static const GUID IID_IFILE={0x4053d276, 0x7227, 0x464d,{0xb4, 0xd5, 0x98, 0x1e, 0xba, 0xbe, 0x3b, 0x3e}};
static const GUID IID_IFIND={0x486a2fdf, 0x6923, 0x49d9, {0x9e, 0x30, 0xd0, 0x18, 0x3f, 0x1, 0x3e, 0x4a}};
static const GUID IID_IMANAGE={0x56a4b2bb, 0xaf7b, 0x4358, {0x89, 0xb8, 0xe1, 0xb2, 0x1a, 0x4d, 0x68, 0x0}};
честно говоря, только знакомлюсь с COM, поэтому не уверен, что в первый раз я правильную форму определения GUID выбрал, если между ними есть вообще разница)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.03.2009, 18:24
Помогаю со студенческими работами здесь

Ошибка линкера c++
У меня есть три файла - main.cpp input.h input.cpp По коду все верно, но линкер кидает ошибку. Обошел много вопросов на эту тему, но не...

Ошибка линкера
Программа должна демонстрировать использование простого меню #include&lt;windows.h&gt; #include&lt;commctrl.h&gt; #pragma comment(lib,...

Ошибка линкера
Здравствуйте!!! Подскажите пожалуйста почему возникают ошибки линкера? // main.cpp #include &quot;parser.h&quot; int main() ...

Ошибка линкера
Здравствуйте. Линкер выдает ошибки: Error: Unresolved external 'list&lt;int&gt;::~list&lt;int&gt;()' referenced from...

Ошибка линкера
Наверное этот вопрос поднимался тысячу раз, так что прошу извинения;) в общем изучаю МК, в нете наткнулся на сайт...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru