Я пытаюсь создать очень простую COM-библиотеку DLL для включения в проект C #, чтобы затем использовать ее для включения некоторых функций C ++ в модуль COM для включения в проект C # (язык, используемый в остальной части кодаbase).
Я включил dll COM, добавил класс в dll COM и создал его экземпляр в коде C #, но до сих пор не смог добавить новые функциональные возможности в новый класс.
Вот что я сделал:
- Новое приложение Windows Forms для Visual C #
- Решение правой кнопкой мыши -> Добавить-> Новый проект ...
- ДобавитьНовый проект Visual C ++ ATL (называемый MyCOMDLL)
- Параметры по умолчанию, выбранные в мастере проектов ATL (я также пытался установить флажок «Поддержка COM + 1.0»)
- Щелкните правой кнопкой мыши проект MyCOMDLL-> Add->Класс
- Добавление нового компонента Visual C ++ ATL COM + 1.0
- Типизированный «MyCOMObject» в короткое имя, которое автоматически заполняет другие поля на вкладке «Имена»
- Оставьте другойнастройки по умолчанию
- Встроенныйпроект MyCOMDLL
- Добавить ссылку на новый MyCOMDLL.dll в приложение Windows Forms на C #
- Щелкните правой кнопкой мыши C # Проект приложения Windows Forms-> Свойства
- На вкладке "Сборка" установите для целевой платформы значение x86
- Добавить "using MyCOMDLLLib;"в файл Form1.cs
- Добавить кнопку в форму и в функции нажатия кнопки добавить
<code>MyCOMDLLLib.MyCOMObjectClass myVariable = new MyCOMObjectClass();
Я пробовал разные вещи, так что выигралне перечислять ничего, кроме самого очевидного здесь - я попытался добавить метод класса в MyCOMObject.h:
// CMyCOMObject
class ATL_NO_VTABLE CMyCOMObject :
public CComObjectRootEx,
public CComCoClass,
public IDispatchImpl
{
public:
CMyCOMObject()
{
}</p>
<pre><code>DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
DECLARE_REGISTRY_RESOURCEID (IDR_MYCOMOBJECT)
DECLARE_NOT_AGGREGATABO * * CMject (CME)
BEGIN_COM_MAP (CMyCOMObject) COM_INTERFACE_ENTRY (IMyCOMObject) COM_INTERFACE_ENTRY (IDispatch) END_COM_MAP ()
// IMyCOMObject public: // SB: Моя попытка добавить новый метод int ReturnT;}};
Метод ReturnTwo был видим в представлении класса CMyCOMObject, но не виден в представлении класса MyCOMObjectClass в проекте C # Windows Forms Application.
Любая помощь высоко ценится.