Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
14 / 7 / 0
Регистрация: 20.09.2009
Сообщений: 89

Импорт элементов класса в программу

20.09.2009, 05:57. Показов 3486. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется созданная библиотека, включающая небольшой класс, как правильно реализовать доступ в программе к элементам данного класса, реализованным в dll.

В приложении-dll имеются, следующие файлы:
stdafx.h
targetver.h
dllmain.cpp-точку входа в dll
вот код VirtualLibraryDLL_beta1.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#pragma once
 
class VirtualFuncs
{
    char* sampleName;
public:
    VirtualFuncs(void)
    {
        sampleName="Renault";
    }
 
    virtual ~VirtualFuncs(void)
    {
    }
    char* CALLBACK GetSampleName();
    virtual char* CALLBACK GetVirtSampleName();
};
Вот код VirtualLibraryDLL_beta1.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
#include "stdafx.h"
#include "VirtualLibraryDLL_beta1.h"
 
extern "C" char* CALLBACK VirtualFuncs::GetSampleName()
{
    return this->sampleName;
}
extern "C" char* CALLBACK VirtualFuncs::GetVirtSampleName()
{
    return sampleName;
}
Вот VirtualLibraryDLL.def
LIBRARY "VirtualLibraryDLL_beta1"

EXPORTS
GetSampleName
GetVirtSampleName
Вот само приложение. использующая данный класс. реализованный в dll
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 "windows.h"
 
int main()
{
    HMODULE hLib;
    hLib=LoadLibrary(L"VirtualLibraryDLL_beta1.dll");
    if(hLib!=NULL)
    {
        char* (*pGetNameSampleVirt)();
        (FARPROC&)pGetNameSampleVirt=GetProcAddress(hLib, "GetVirtSampleName");
        if(!pGetNameSampleVirt)
        {
            return -2;
        }
        else
        {
            char* strNameVirt=pGetNameSampleVirt();
        }
        char* (*pGetNameSample)();
        (FARPROC&)pGetNameSample=GetProcAddress(hLib, "GetSampleName");
        if(!pGetNameSample)
        {
            return -3;
        }
        else
        {
            char* strName=pGetNameSample();
        }
        FreeLibrary(hLib);
    }//if(hLib!=NULL)
    else
    {
        MessageBox(NULL, L"Невозможно загрузить DLL", L"DLL не найдена", MB_OK);
    }
}
Добавлено через 3 минуты
У меня есть предположение что надо помимо загрузки dll описывать файл-определения класса, а то как реализовать доступ к методом класса без самого объекта.
Или как-то можно описать сам конструктор, создающий объект в def-файле?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.09.2009, 05:57
Ответы с готовыми решениями:

Импорт класса из C++ в C#
Есть класс (шаблонный), написанный на С++. Необходимо его импортировать в C#. Я пробовал собирать из C++ класса dll, написав class...

Импорт класса ошибка
Где здесь ошибка? вот пакет: package samples { public class SampleCode { public var sampleGreeting:String; ...

Импорт класса из dll
Добрый день! Извиняюсь, если вопрос очень нубский. Обшарил кучу разных материалов, но не нашел ответа на вопрос. У меня есть проект на...

23
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
24.09.2009, 01:01
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от NightmareCode Посмотреть сообщение
Ну что кто-нибудь знает по каким правилам имя функции искажается линкером очень нужно!!!!
так не понятно, что нужно: то нужно было класс импортировать из длл, который, как я понял, сами же и создаем, теперь углубились в украшение имен, потом переменную назвать будем думать как...

задачу сформулируйте еще раз. полностью, а не какую-то деталь, в которую вы уперлись.
0
14 / 7 / 0
Регистрация: 20.09.2009
Сообщений: 89
24.09.2009, 01:09  [ТС]
Цитата Сообщение от novi4ok Посмотреть сообщение
Ну что кто-нибудь знает по каким правилам имя функции искажается линкером очень нужно!!!!
Вот основной вопрос!
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
24.09.2009, 01:17
http://support.microsoft.com/kb/132044/

http://support.microsoft.com/kb/126845

если это поможет.
0
14 / 7 / 0
Регистрация: 20.09.2009
Сообщений: 89
24.09.2009, 01:35  [ТС]
Крайне мало информации в этих топиках о декорировании имен методов и функций линкером.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.09.2009, 01:35

Импорт С# класса из DLL в С++/CLI
имеется HelloWorld на Шарпе, приведите пожалуйста пример его использования в консольном С++/CLR, тоесть импорт DLL, создание объекта, думаю...

Импорт класса из другого файла
Кароче Мне необходимо прописать действие при нажатии кнопки. Интерфейс сделал в QtDesigner, файл с которым работаю и новый в одной и той...

Импорт класса из другого проекта
Подскажите, пожалуйста, каким образом я могу импортировать класс Java, который был объявлен в другом проекте (среда - Eclipse) ? ...

Как сделать импорт класса?
Ситуация такая: Есть Class1 он лежит в package1.package2.Class1 Есть Class2 он лежит в Root т.е. без package. Как в Class1 сделать...

Импорт статических методов класса Math.
Хочу импортировать методы и писать так: double n = sqrt(4.0); Делаю: package test; //import java.lang.Math; public class...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru