Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ATL DLL ядро и интерфейс на C#. 
V
    Опции темы
Elfet
Дата 2.3.2009, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Всем привет!
Мне нужно сделать одну программку сл структуры: всё вычисления на C++ ATL DLL, а интерфейс в C#.
Расскажите или дайте какие-нибудь ссылки про то как создавать ATL DLL на C++? Про то как взаимодействовать из C# с ATL DLL? У меня стоит VS2005.

Заранее спасибо!


--------------------
PM MAIL WWW Skype   Вверх
Partizan
Дата 2.3.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Elfet

Про создание ATL-проекта в VS гугль поможет, я думаю. А взаимодействие осуществляется так же как и с любой другой COM-сборкой...добавляете в References из вкладки COM (dll должна быть зарегистрирована в системе) и используете её классы как хотите.


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Elfet
Дата 2.3.2009, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Ещё я что-то видел про DllImport - это что?

А ещё как зарегистрировать в системе эту dll? Можно ли просто в каталоге с папкой эту длл положить? 


--------------------
PM MAIL WWW Skype   Вверх
Rififi
Дата 2.3.2009, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 5
Всего: 36



Elfet
DllImport нужен в случае обычных функций, которые экспортируюся из exe/dll, но не принадлежат com-обьекту
При создании COM, ATL-визард сам его регистрирует в системе
или можно как обычно, regsvr32 mycom.dll
PM MAIL   Вверх
Elfet
Дата 2.3.2009, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Цитата(Rififi @  2.3.2009,  20:24 Найти цитируемый пост)
или можно как обычно, regsvr32 mycom.dll 

Это как - как обычно?

Добавлено через 38 секунд
Можно ли как-нибудь эту ATL DLL бросить в папку с exe-шкой и всё?


--------------------
PM MAIL WWW Skype   Вверх
Partizan
Дата 2.3.2009, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Elfet, а с чем связано такое рвение использовать именно ATL? Обычная библиотека не подойдёт?


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Elfet
Дата 2.3.2009, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Что за обычная библиотека? Чем она отличается? 

А вообще мне нужно делать на C++ в ATL по заданию. 


--------------------
PM MAIL WWW Skype   Вверх
Любитель
Дата 2.3.2009, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 11
Всего: 92



ATL предназначенна для создания COM-объектов. Через DllImport, ну можно.. smile Реализовав вручную работу с COM (здесь должен быть значок "не влезать! убьёт!").

Так вот - COM объект в любом случае надо регистрировать в системе. Благо, ATL генерит нужные функции для авторегистрации, так что, действительно, сработает стандартный запуск regsvr32 mylib.dll. А после - обычный COm Reference.


--------------------
PM MAIL ICQ Skype   Вверх
Partizan
Дата 2.3.2009, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Любитель, ну почему же "не влезать, убьёт" =) Совсем даже не убьёт smile

Elfet, в общем, для начала, советую ознакомиться с тем, что такое ATL, и как создаются ATL объекты в студии...ну а потом по ситуации - спрашивать тут  smile 


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Любитель
Дата 2.3.2009, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 11
Всего: 92



Ну, если человек не знает ничего о COM (раз не знаком с regsvr32 - то и с COM в целом, я думаю тоже). То работать с ним вручную...

На всякий случай: речь шла именно про работу с помощью DllImport с COM. А не про использование ДллИмпорта как такового. Т. е. DllGetClassObject/QueryInterface.


--------------------
PM MAIL ICQ Skype   Вверх
Partizan
Дата 3.3.2009, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Любитель, я так и понял) Но ничего особо смертельного там нет) Я предложил человеку первый шаг )

з.ы. кстати говоря, я недавно натыкался у кого-то в блоге на реализацию работы с COM без регистрации сборки...думаю, если понадобится - гугль поможет найти...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Любитель
Дата 3.3.2009, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 11
Всего: 92



Ну.. Если нам известен интерфейс COM-объектов, то работа очевидна. Получаем объект с помощью DllGetClassObject (здесь только CLSID надо правильный передать), затем QueryInteface (аналогично). И кастим к нашему интерфейсу. Юзаем методы.

Если интерфейс неизвестен, то получить его без регистрации невозможно.


--------------------
PM MAIL ICQ Skype   Вверх
Partizan
Дата 3.3.2009, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Любитель, да, всё так smile


Elfet Инфы в топике уже предостаточно ;)


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Elfet
Дата 3.3.2009, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Да, всём спасибо!

А есть ещё какие-нибудь варианты кроме ATL DLL для написания вычислительной части программы на C++?


--------------------
PM MAIL WWW Skype   Вверх
Partizan
Дата 3.3.2009, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Elfet, Ну да....как бы создать обычную dll-ку, не связываясь с COM/ATL, и просто дёргая функции через DllImport


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Elfet
Дата 3.3.2009, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



А чем они вообще отличаются? с COM/ATL и без?


--------------------
PM MAIL WWW Skype   Вверх
Любитель
Дата 3.3.2009, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 11
Всего: 92



Одно дело длл-ка, которая экспортирует просто какие-то функции и другое - COM-сборка. Строго говоря, COM тоже экспортирует функции, но жёстко определённые. А вообще - прочитайте хотя бы в двух словах про технологию COM, ну и 9раз таково условие) в специфике использования в ATL.


--------------------
PM MAIL ICQ Skype   Вверх
Elfet
Дата 4.3.2009, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



А дайте что-нибудь про COM почитать? smile


--------------------
PM MAIL WWW Skype   Вверх
Partizan
Дата 4.3.2009, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67





--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Elfet
Дата 4.3.2009, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



спасибо!  smile 


--------------------
PM MAIL WWW Skype   Вверх
Elfet
Дата 4.3.2009, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Не хочу разводит много тем. Спрошу тут:
Сделал этот ATL DLL я. Добавил в неё класс: CSolver. Зарегистрировал в системе. Добавил в проект на C#. Но вот тут проблема создаю объект: solver = new SFCLib.SolverClass();
А вот свойства его публичные не доступны :/
Что я те так делаю?
Код:
Solver.h
Код

// Solver.h : Declaration of the CSolver

#pragma once
#include "resource.h"       // main symbols

#include "SFC.h"


#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
#error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms."
#endif



// CSolver

class ATL_NO_VTABLE CSolver :
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<CSolver, &CLSID_Solver>,
    public IDispatchImpl<ISolver, &IID_ISolver, &LIBID_SFCLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
    CSolver()
    {

    }

DECLARE_REGISTRY_RESOURCEID(IDR_SOLVER)


BEGIN_COM_MAP(CSolver)
    COM_INTERFACE_ENTRY(ISolver)
    COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()



    DECLARE_PROTECT_FINAL_CONSTRUCT()

    HRESULT FinalConstruct()
    {
        return S_OK;
    }

    void FinalRelease()
    {
    }

public:
    void Init(int);
    int Progress();
    int i;
    int iMax;
    bool Iteration();
};

OBJECT_ENTRY_AUTO(__uuidof(Solver), CSolver)



Solver.cpp
Код

// Solver.cpp : Implementation of CSolver

#include "stdafx.h"
#include "Solver.h"

// CSolver
void CSolver::Init(int _iMax)
{
    iMax = _iMax;
    i = 0;
}

int CSolver::Progress()
{
    return (int)((float)i / iMax * 100);
}

bool CSolver::Iteration()
{
    if(i < iMax)
    {
        i++;
        return true;
    }
    else
    {
        return false;
    }
}






Form.cs
Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace SFApp
{
    public partial class Form1 : Form
    {
        private SFCLib.SolverClass solver;
        public Form1()
        {
            InitializeComponent();
            solver = new SFCLib.SolverClass();
        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            solver.Init(); // Error    1    'SFCLib.SolverClass' does not contain a definition for 'Init'    E:\Visual Studio 2005\Projects\SFApp\SFApp\Form1.cs    22    20    SFApp

        }
    }
}



--------------------
PM MAIL WWW Skype   Вверх
Partizan
Дата 4.3.2009, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Elfet, видимо idl-декларации не хватает + как правило геттеры называют типа get_Progress(), а сеттеры - set_Progress()

http://www.rsdn.ru/forum/message/158854.all.aspx


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Elfet
Дата 4.3.2009, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Я вообще не использую никакие интерфейсы. Можно ли как-то просто получить доступ к классу в этой dll? Создать экземпляр класса? 


--------------------
PM MAIL WWW Skype   Вверх
Partizan
Дата 4.3.2009, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Elfet, ну так у вас же всё создаётся....Просто Interop-сборка генерируется по tlb-шке, которая, в свою очередь появляется из idl-декларации...

у вас в ATL проекте есть файл ИМЯ_ПРОЕКТА.idl - это и есть idl-декларация вашего класса


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Elfet
Дата 4.3.2009, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



И что туда нужно добавить? 


--------------------
PM MAIL WWW Skype   Вверх
Partizan
Дата 5.3.2009, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67





--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Любитель
Дата 5.3.2009, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 11
Всего: 92



Цитата(Elfet @  4.3.2009,  23:47 Найти цитируемый пост)
И что туда нужно добавить?  

Лучше вручную ничего не пиши. Там в Class view, выбираешь add method, add property и тебе пропишется и idl для интерфейса, и заглушка для реализации. ATL всё-таки в своё время неплохая вещь была ;)


--------------------
PM MAIL ICQ Skype   Вверх
Elfet
Дата 5.3.2009, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Любитель, значит сейчас всё-таки какая-то замена ATL пришла?


--------------------
PM MAIL WWW Skype   Вверх
Любитель
Дата 5.3.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 11
Всего: 92



Ээ.. COM просто мало кто теперь юзает (если именно в плане создания COM-серверов). Да и тем более, при возможности, на .NEt это сделать гораздо проще.


--------------------
PM MAIL ICQ Skype   Вверх
Elfet
Дата 5.3.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Любитель, это не помогло :(

Добавлено через 6 минут и 52 секунды
Добавил метод - всё равно его не видно.
с HRESULT  вообще не хочет компилироваться.


--------------------
PM MAIL WWW Skype   Вверх
Partizan
Дата 5.3.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Цитата

COM просто мало кто теперь юзает (если именно в плане создания COM-серверов)


Если пишешь ShellExtensions без COM никуда ;)

Цитата

Добавил метод - всё равно его не видно.
с HRESULT  вообще не хочет компилироваться. 



Elfet, какая студия у Вас?


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Любитель
Дата 5.3.2009, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 11
Всего: 92



Цитата(Elfet @  5.3.2009,  16:16 Найти цитируемый пост)
Добавил метод - всё равно его не видно.

Покажи, что в idl получилось-то? И да - метод явно должен возвращать HRESULT в любом случае. Что не компилируется-то? Что выдаёт?

Цитата(Partizan @  5.3.2009,  16:53 Найти цитируемый пост)
Если пишешь ShellExtensions без COM никуда ;)

Да. Сейчас многое на COM основано в винде. И аддины для студии/оффиса - это тоже сейчас (пока) COM. Но, как я уже сказал зачастую сейчас уже COM-сервера девелопят на дотНете. Да и новые АПИ уже редко на COM основывают. Хотя, конечно АТЛ умирать не собирается. Но и развиваться ИМХО тоже.

В висте, Win7, насколько я понимаю, все новые АПИ уже не комовские. Хотя точно утверждать тут не берусь, ибо не знаю smile


--------------------
PM MAIL ICQ Skype   Вверх
Elfet
Дата 5.3.2009, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



VS2005. 
Вроде разобрался. Всем спасибо!
Код

interface IComponentRegistrar : IDispatch
{
    [id(1)]    HRESULT Attach([in] BSTR bstrPath);
    [id(2)]    HRESULT RegisterAll();
    [id(3)]    HRESULT UnregisterAll();
    [id(4)]    HRESULT GetComponents([out] SAFEARRAY(BSTR)* pbstrCLSIDs, [out] SAFEARRAY(BSTR)* pbstrDescriptions);
    [id(5)]    HRESULT RegisterComponent([in] BSTR bstrCLSID);
    [id(6)] HRESULT UnregisterComponent([in] BSTR bstrCLSID);
};

А можно как нибудь возвращать значения не через параметры? 


--------------------
PM MAIL WWW Skype   Вверх
Любитель
Дата 5.3.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 11
Всего: 92



Цитата(Elfet @  5.3.2009,  17:25 Найти цитируемый пост)
А можно как нибудь возвращать значения не через параметры?  

Явно (в сишном коде) - нет. С точки зрения обращения к COM-серверу из клиента - можно один из параметров пометить как retval в IDL (в ATL Class Wizard-е можно выбрать галку для одного из параметров). Это и будет возвращаемое значение.


--------------------
PM MAIL ICQ Skype   Вверх
Elfet
Дата 5.3.2009, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Любитель, да, я так и сделал smile
Жутко неудобная это вещь COm оказалась smile

Добавлено через 9 минут и 8 секунд
Всё так я не очень понимаю. Можно ли как-то без использования COM сделать ядро на C++, а интерфейс на C#? 
C# - слишком медленный для больших вычислений. 


--------------------
PM MAIL WWW Skype   Вверх
Partizan
Дата 5.3.2009, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Elfet, ну конечно можно smile Написать обычную Dll-ку и дёргать из неё функции с помощью DllImport.


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Elfet
Дата 5.3.2009, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Что-то я не до втыкаю, как эту обычную дллку писать на C++? :(


--------------------
PM MAIL WWW Skype   Вверх
Partizan
Дата 5.3.2009, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67





--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Elfet
Дата 6.3.2009, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



спасибо!


--------------------
PM MAIL WWW Skype   Вверх
ForveAvar
Дата 11.10.2009, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 6.8.2009

Репутация: нет
Всего: 1



Доброго времени суток!!!!

У мну тут проблема такая же как у автора....при создании объекта для получения функций и переменных из класа  в com, я не могу к ним доступиться.....подскажите что нужно дописать

Calc.h
Код

// Calc.h: объявление CCalc

#pragma once
#include "resource.h"       // основные символы

#include "lab_02Com_i.h"

// CCalc

class ATL_NO_VTABLE CCalc :
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<CCalc, &CLSID_Calc>,
    public ICalc
{
public:
    CCalc()
    {
    }

DECLARE_REGISTRY_RESOURCEID(IDR_CALC)

DECLARE_NOT_AGGREGATABLE(CCalc)

BEGIN_COM_MAP(CCalc)
    COM_INTERFACE_ENTRY(ICalc)
END_COM_MAP()



    DECLARE_PROTECT_FINAL_CONSTRUCT()

    HRESULT FinalConstruct()
    {
        return S_OK;
    }

    void FinalRelease()
    {
    }

public:
        double a,b;
        STDMETHOD(plus)(double *pVal);
        STDMETHOD(minus)(double *pVal);
        STDMETHOD(mnoj)(double *pVal);
        STDMETHOD(dil)(double *pVal);

};

OBJECT_ENTRY_AUTO(__uuidof(Calc), CCalc)


Calc.cpp
Код

// Calc.cpp: реализация CCalc

#include "stdafx.h"
#include "Calc.h"


// CCalc

STDMETHODIMP CCalc::plus(double *pVal)
{
    *pVal = a+b;
    return S_OK;
}
STDMETHODIMP CCalc::minus(double *pVal)
{
    *pVal = a-b;
    return S_OK;
}
STDMETHODIMP CCalc::dil(double *pVal)
{
    *pVal = a/b;
    return S_OK;
}
STDMETHODIMP CCalc::mnoj(double *pVal)
{
    *pVal = a*b;
    return S_OK;
}


Вызов
Код

...
using lab_02ComLib;

namespace lab_01
{
    public partial class Form1 : Form
    {
        int user_oper = 0;
        double first_value = 0, second_value = 0;
        bool minus_used = false;
        CalcClass c = new CalcClass();

        private void button3_Click(object sender, EventArgs e)
        {
             c.dil() //  Здесь само собой ошибка 
        }
    }
}


Com зарегистрированный и прибавленный к ссилкам проекта.

Помогите новичку smile 
PM MAIL   Вверх
ForveAvar
Дата 12.10.2009, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 6.8.2009

Репутация: нет
Всего: 1



Хотя бы кто-то помогите.....очень нужно....третий день не могу разобраться smile 

Это сообщение отредактировал(а) ForveAvar - 12.10.2009, 17:47
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1781 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.