3 / 3 / 1
Регистрация: 05.07.2013
Сообщений: 39
1

Ошибка в DLL 800401F9

16.03.2015, 12:14. Показов 2060. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Изучаю технологию COM, возникли некоторые проблемы. Есть код:

IFace.h
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <objbase.h>
#include <initguid.h>
extern "C" 
{
 
    // {BA84A25E-EFF5-4AB7-9A0E-133551BCA8EC}
    extern const IID IID_IX = 
    { 0xba84a25e, 0xeff5, 0x4ab7, { 0x9a, 0xe, 0x13, 0x35, 0x51, 0xbc, 0xa8, 0xec } };
 
    // {6E2E4941-FEE3-4135-9DEC-8C0F23928662}
    extern const CLSID CLSID_Component1 = 
    { 0x6e2e4941, 0xfee3, 0x4135, { 0x9d, 0xec, 0x8c, 0xf, 0x23, 0x92, 0x86, 0x62 } };
 
}
 
interface IX : IUnknown
{
    virtual int __stdcall Fx() = 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
#include <iostream>
#include <objbase.h>
#include "REGISTRY.H"
#include "Iface.h"
 
 
void trace(const char* msg) { std::cout << "Component 1:\t" << msg << std::endl ;}
 
 
class CA : public IX
{
    
    virtual HRESULT __stdcall QueryInterface(const IID& iid, void** ppv) ;          
    virtual ULONG __stdcall AddRef() ;
    virtual ULONG __stdcall Release() ;
 
    
    virtual int __stdcall Fx() { return 0;}
 
public:
    
    CA() { m_cRef=0;}
 
 
    ~CA() { }
 
private:
    long m_cRef ;
} ;
 
HRESULT __stdcall CA::QueryInterface(const IID& iid, void** ppv)
{   
    if (iid == IID_IUnknown)
    {
        //trace("Return pointer to IUnknown.") ;
        *ppv = static_cast<IUnknown*>(this) ;
    } 
    else if (iid == IID_IX)
    {
    //  trace("Return pointer to IX.") ;
        *ppv = static_cast<IX*>(this) ;
    }
    else
    {      
        //trace("Interface not supported.") ;
        *ppv = NULL ;
        return E_NOINTERFACE ;
    }
    reinterpret_cast<IUnknown*>(*ppv)->AddRef() ; 
    return S_OK ;
}
 
ULONG __stdcall CA::AddRef()
{
    return InterlockedIncrement(&m_cRef) ;
}
 
ULONG __stdcall CA::Release() 
{
    if (InterlockedDecrement(&m_cRef) == 0)
    {
        delete this ;
        return 0 ;
    }
    return m_cRef ;
}
 
//
// Creation function
//
extern "C" IUnknown* CreateInstance()
{
    IUnknown* pI = static_cast<IX*>(new CA) ;
    pI->AddRef() ;
    return pI ;
}


IDL
Кликните здесь для просмотра всего текста
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
import "oaidl.idl";
import "ocidl.idl";
 
 
[ 
 object, 
 uuid(BA84A25E-EFF5-4AB7-9A0E-133551BCA8EC), 
 helpstring("IX Interface"), 
 pointer_default(unique) 
] 
interface IX : IUnknown 
{ 
  HRESULT Fx(); 
}; 
 
[ 
uuid(CF40076E-C9E5-46F0-88A7-C7971D737474), 
version(1.0), 
helpstring("ПопыткаCOM") 
] 
library COMLIBEPTA
{ 
importlib("stdole32.tlb"); 
 
[ 
uuid(6E2E4941-FEE3-4135-9DEC-8C0F23928662), 
helpstring("CAкласс10")
] 
coclass CA 
{ 
 [default] interface IX;  }; 
};


На выходе получаю dll и tlb. Без проблем регистрируется в системе. Но, при попытке использовать в программе, вываливается с ошибкой:

Не удалось получить фабрику класса COM для компонента с CLSID {6E2E4941-FEE3-4135-9DEC-8C0F23928662} из-за следующей ошибки: 800401f9 Ошибка в библиотеке DLL (Исключение из HRESULT: 0x800401F9 (CO_E_ERRORINDLL)).
Подскажите, пожалуйста, в чем проблема. Уже столько времени с этим бьюсь. Заранее спасибо.

Код тестовой программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// ConsoleApplication12.cpp: главный файл проекта.
 
#include "stdafx.h"
 
using namespace System;
 
int main(array<System::String ^> ^args)
{
    Console::WriteLine(L"Здравствуй, мир!");
    COMLIBEPTA::IX^ test;
    test=gcnew COMLIBEPTA::CAClass;
    return 0;
}
0
Лучшие ответы (1)
16.03.2015, 12:14
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.03.2015, 12:14
Ответы с готовыми решениями:

Что за ошибка: ошибка '800401f9' ?
Люди добрые помогите пожалуйста. При обращении к БД (MS Access) возникает такое: ошибка '800401f9' ...

Ошибка об отсутствии MSVCP140D.dll, ucrtbased.dll, CONCRT140D.dll, VCRUNTIME140D.dll
Добрый день, товарищи. Возникла проблема. Делаю программу с использованием openCV 3.1 на Visual Studio 2013. При компиляции выдает ошибку...

Visual Basic + VC++ DLL = ошибка Bad DLL calling convertation
Попытался я написать DLL-ку на VC++, для последующего использования ее в VB. Но поскольку я в VC++ чайник - он мне выдает ошибку Bad DLL...

3
Модератор
 Аватар для vxg
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,426
16.03.2015, 12:57 2
Цитата Сообщение от Jester-X Посмотреть сообщение
Подскажите
а где собственно фабрика классов в вашем коде?

Добавлено через 54 секунды
...и код DLL на всякий случай где?
0
3 / 3 / 1
Регистрация: 05.07.2013
Сообщений: 39
16.03.2015, 13:01  [ТС] 3
То есть для того, что бы использовать библиотеку типов, обязательно нужна фабрика классов? Упс...
0
Модератор
 Аватар для vxg
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,426
16.03.2015, 13:14 4
Лучший ответ Сообщение было отмечено Jester-X как решение

Решение

Цитата Сообщение от Jester-X Посмотреть сообщение
для того, что бы использовать библиотеку типов, обязательно нужна фабрика классов?
нужно определить фабрику и собрать DLL с соответствующими экспортами

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

Ошибка Can't find DLL entry point CryptEnumProvidersA in advapi32.dll
Проблема вот в чем. Объявляем CryptEnumProviderTypesA Private Declare Function CryptEnumProviders Lib 'advapi32.dll' Alias...

EXE & DLL, DLL не запускается, 500 ошибка
Делаю EXE, скрипт простой, всё работает, на Apache и FPServer. Компилирую в DLL, закидываю на сервер, DLL не работает, пишет 500 ошибку....

Слетели библиотеки .dll При запуске любых приложений на компьютере вылетает ошибка с расширением .dll
Не запускается приложения на windows 8. А также удалились точки доступа Восстановления Системы и компьютер глючит в последнее время. Что...

Spell Checker ошибка: Word cannot find the spelling file mssp3RU.dll or mssp232.dll for Russian (Russia).
object nothing = Missing.Value; Pitayus ispolzivat Spell Checker Word-a tolko vot chto poluchayu v otvet Word cannot find...

При запуске Nero ошибка "Точка входа в процедуру не найдена в библиотеке DLL uNeroErr.dll
Доброй ночи! Помогите пожалуйста чайнику! При запуске Nero выскакивает ошибка: Точка входа в процедуру...


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Ошибка Docker "Got permission denied while trying to connect to the Docker daemon socket at"
hw_wired 14.02.2025
Разработка с использованием Docker может иногда преподносить неожиданные сюрпризы, и одним из самых распространенных камней преткновения становится ошибка с отказом в доступе к демону Docker. . . .
Ошибка "No 'Access-Control-Allow-Origin' header is present on the requested resource"
hw_wired 14.02.2025
При разработке современных веб-приложений нередко сталкиваешься с ошибкой "No 'Access-Control-Allow-Origin' header is present on the requested resource". Эта проблема возникает из-за политики. . .
Как закрыть порт в Linux
hw_wired 14.02.2025
Управление сетевыми портами в Linux - непростая, но важная задача для обеспечения безопасности системы. Каждый открытый порт - это потенциальная уязвимость, через которую злоумышленики могут. . .
Ошибка Angular "Can't bind to 'taskForm' since it isn't a known property of 'form'"
hw_wired 14.02.2025
При разработке веб-приложений на Angular можно столкнуться с ошибкой "Can't bind to '' since it isn't a known property of 'form'". Эта ошибка появляется в консоли браузера когда мы пытаемся. . .
Сообщение Git "Pulling without specifying how to reconcile divergent branches is discouraged"
hw_wired 14.02.2025
При работе с системой контроля версий Git многие разработчики сталкиваются с предупреждающим сообщением "Pulling without specifying how to reconcile divergent branches is discouraged". Это. . .
Как настроить количество пробелов в отступах табов в Visual Studio Code
hw_wired 14.02.2025
Visual Studio Code предоставляет несколько гибких способов настройки табуляции, каждый из которых имеет свои преимущества. Самый простой и наглядный метод - через графический интерфейс настроек, где. . .
Что означает знак восклицания в TypeScript
hw_wired 14.02.2025
TypeScript - удивительный язык программирования, который предоставляет множество возможностей для работы с типами данных. Особый интерес вызывает оператор утверждения ненулевого значения, который. . .
Как свернуть/скрыть секции кода в Visual Studio Code
hw_wired 14.02.2025
Ежедневно мы работам с файлами, содержащими сотни и тысячи строк кода. Навигация по такому объему становится настоящим испытанием, особенно когда нужно быстро найти нужный метод или переменную. . . .
Автоматическое создание файла requirements.tx­t в Python
hw_wired 14.02.2025
Дружелюбная среда для разработки на Python, один из самых широко используемых языков программирования, состоит не только из самого кода, но и целого ряда важных компонентов. И если вы когда-нибудь. . .
Передача переменных окружения в контейнер Docker
hw_wired 14.02.2025
При работе с Docker контейнерами возникает необходимость передать различные настройки и конфигурационные параметры - от строк подключения к базам данных до API ключей. И хотя можно жестко прописать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru