6 / 10 / 2
Регистрация: 29.05.2015
Сообщений: 661

Чё за ошибка? 113 35 [Error] 'IUnknown' is ambigouous base of 'CA'

16.03.2017, 17:24. Показов 1463. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я уже с ума скоро сойду хД. Я пишу одно и то же 30-й раз,компилятор мне выводит в разное время разные ошибки. Как библиотеку c "IUnknown" подключаю,вообще конец. То фу-я не экспортируется....

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
#include <objbase.h>
 
static const IID IID_IX = {0x439508bd,0xd021,0x4cb9,0xa52e,0xabab9c988574};
static const IID IID_IY = {0x14de7546,0x95ae,0x4eea,0xa883,0xf400923c33eb};
 
DllClass::DllClass()
{
 
}
 
 
DllClass::~DllClass ()
{
 
}
 
 
BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;
 
      case DLL_PROCESS_DETACH:
        break;
 
      case DLL_THREAD_ATTACH:
        break;
 
      case DLL_THREAD_DETACH:
        break;
    }
 
    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}
 
interface IX : IUnknown
{
    virtual int _stdcall Fx() = 0;
};
 
interface IY : IUnknown
{
    virtual int _stdcall Fy() = 0;
};
 
class CA : public IX,public IY
{
    private:
        int m_cRef = 0;
        
    public:
        virtual HRESULT _stdcall QueryInterface(const IID &iid,void** ppv);
        virtual ULONG _stdcall AddRef();
        virtual ULONG _stdcall Release();
        
        virtual int _stdcall Fx()
        {
            return 83;
        }
        
        virtual int _stdcall Fy()
        {
            return 11;
        }
};
 
HRESULT _stdcall CA :: QueryInterface(const IID &iid,void** ppv)
{
    if (iid == IID_IX)
    {
        *ppv = static_cast<IX*>(this);
    }
    
    else if (iid == IID_IY)
    {
        *ppv = static_cast<IY*>(this);
    }
    
    else
    {
        *ppv = NULL;
        return E_NOINTERFACE;
    }
    
    reinterpret_cast<IUnknown*>(*ppv)->AddRef();
}
 
ULONG _stdcall CA :: AddRef()
{
    return ++m_cRef;
}
 
ULONG _stdcall CA :: Release()
{
    if (--m_cRef==0)
    {
        delete this;
    }
    
    return m_cRef;
}
 
extern "C" IUnknown* CreateInstance()
{
    IUnknown* pI = (IUnknown*)(new CA);
    pI->AddRef();
    return pI;
}
Добавлено через 8 минут
Ещё "клиент" не работает:
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
31
32
33
34
35
#include <iostream>
#include "dll.h"
#include <objbase.h>
 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 
typedef IUnknown* (*CREATEFUNCPTR)();
 
IUnknown* CallCreateInstance(char *name)
{
    HINSTANCE hComponent = :: LoadLibrary(name);
    
    if (hComponent == NULL)
    {
        printf("Error\n");
        return NULL;
    }
    
    CREATEFUNCPTR CreateInstance = (CREATEFUNCPTR) :: GetProcAddress(hComponent,"CreateInstance");
    
    if (CreateInstance == NULL)
    {
        printf("Error of export CreateInstance\n");
        return NULL;
    }
    
    return CreateInstance();
}
 
int main(int argc, char** argv) {
    
    CallCreateInstance("C_DLL.dll");
    
    return 0;
}
В проверке на нуль выдаёт принт с ошибкой.

Добавлено через 6 минут
Компилятор псих какой-то. Я забыл вернуть значение,но мне вообще ничего про это не выдал....

Добавлено через 1 час 9 минут
Это вообще какой-то ужас. Длл сделал на Dev c++, Клиент на VS. Вот теперь ошибки в чём они? И вообще объясните весь код,то,что там после typedef. Эти getproc.CREATEFUNCPTR.

1>c:\users\user\documents\visual studio 2008\projects\create_cl\create_cl\create _cl.cpp(13) : error C2664: LoadLibraryW: невозможно преобразовать параметр 1 из 'char *' в 'LPCWSTR'
1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>Журнал построения был сохранен в "file://c:\Users\User\Documents\Visual Studio 2008\Projects\CREATE_CL\CREATE_CL\Debug\ BuildLog.htm"
1>CREATE_CL - ошибок 1, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

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
31
32
33
34
35
// CREATE_CL.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include "dll.h"
#include <windows.h>
 
typedef IUnknown* (*CREATEFUNCPTR)();
 
IUnknown* CallCreateInstance(char *name)
{
    HINSTANCE hComponent = ::LoadLibrary(name);
 
    if (hComponent == NULL)
    {
        printf("Error\n");
        return NULL;
    }
 
    CREATEFUNCPTR CreateInstance = (CREATEFUNCPTR)::GetProcAddress(hComponent,"CreateInstance");
 
    if(CreateInstance == NULL)
    {
        printf("Error of expotr\n");
        return NULL;
    }
 
    return CreateInstance();
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include "dll.h"
#include <windows.h>
#include <objbase.h>
 
static const IID IID_IX = {0x439508bd,0xd021,0x4cb9,0xa52e,0xabab9c988574};
static const IID IID_IY = {0x14de7546,0x95ae,0x4eea,0xa883,0xf400923c33eb};
 
DllClass::DllClass()
{
 
}
 
 
DllClass::~DllClass ()
{
 
}
 
 
BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;
 
      case DLL_PROCESS_DETACH:
        break;
 
      case DLL_THREAD_ATTACH:
        break;
 
      case DLL_THREAD_DETACH:
        break;
    }
 
    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}
 
interface IX : IUnknown
{
    virtual int _stdcall Fx() = 0;
};
 
interface IY : IUnknown
{
    virtual int _stdcall Fy() = 0;
};
 
class CA : public IX,public IY
{
    private:
        int m_cRef = 0;
        
    public:
        virtual HRESULT _stdcall QueryInterface(const IID &iid,void** ppv);
        virtual ULONG _stdcall AddRef();
        virtual ULONG _stdcall Release();
        
        virtual int _stdcall Fx()
        {
            return 83;
        }
        
        virtual int _stdcall Fy()
        {
            return 11;
        }
};
 
HRESULT _stdcall CA :: QueryInterface(const IID &iid,void** ppv)
{
    if (iid == IID_IX)
    {
        *ppv = static_cast<IX*>(this);
    }
    
    else if (iid == IID_IY)
    {
        *ppv = static_cast<IY*>(this);
    }
    
    else
    {
        *ppv = NULL;
        return E_NOINTERFACE;
    }
    
    reinterpret_cast<IUnknown*>(*ppv)->AddRef();
    return S_OK;
}
 
ULONG _stdcall CA :: AddRef()
{
    return ++m_cRef;
}
 
ULONG _stdcall CA :: Release()
{
    if (--m_cRef==0)
    {
        delete this;
    }
    
    return m_cRef;
}
 
extern "C" IUnknown* CreateInstance()
{
    IUnknown* pI = (IUnknown*)(new CA);
    pI->AddRef();
    return pI;
}
Добавлено через 18 часов 24 минуты
Да что за ошибка?

Добавлено через 45 секунд
Я из-за этого бреда уже недели 3 не могу освоить динамическую компоновку
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.03.2017, 17:24
Ответы с готовыми решениями:

Ошибка: const Error 113: Error in statement
const nmax=100; var a: array of real; i,j,d,n,m: integer; begin randomize; write('Введите размеры массива n,m: '); ...

ошибка 113 error in statment
проблема в следующем коде: program schet; uses crt; var a, b, c: integer; var vop: string; label inc, out, nach; begin nach: ...

Ошибка 113 error in statement
Здравствуйте! у меня есть задание: исправить ошибки в программе и записать правильный вариант. Я кое-что исправила (например, оператор Goto...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.03.2017, 17:24
Помогаю со студенческими работами здесь

Ошибка инструкции (Error 113 in statement)
Сделал программу ну в самом конце программы перед End. выдаёт ошибку 113 Ошибка инструкции(Error 113 in statement)я ёё не могу найти можит...

Ошибка в программе 113 error is statement
ошибка в прогрмме 113 error is statement Program z3; Uses Crt; Var x,a,y,f:real; begin ClrScr; x:=sin(18.1283)/cos(18.1283);...

Вращение отрезка и ошибка "Error 113. Error in statement"
Здравствуйте, встретил старый студенческий листинг реализации задачи: &quot;Отрезок, поворачивающийся на 15° при нажатии клавиши «пробел» и...

Не могу исправить ошибку :113 H:\Dev-Cpp\Проекты\уроки\Безымянный3.cpp cannot convert `IDirectDraw7**' to `IDirectDraw**' for argument `2' to `HRESULT DirectDrawCreate(GUID*, IDirectDraw**, IUnknown*)
Недавно начал изучать оконные программы и работу с DirectX. Но при написании программы столкнулся с проблемой: не могу исправить одну...

visual studio 2008 c++ перевести IUnknown** переменную в IUnknown*
Как перевести IUnknown** переменную в IUnknown* ? Помогите пожалуйста.


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

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

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru