Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2019, 11:04   #1
Irina_c
 
Регистрация: 06.06.2017
Сообщений: 7
По умолчанию COM C# загружается в C++ только на компьютере где собирается проект.

Есть необходимость подключать формы на С# к программе на C++ (visual studio 2015). Пробовала 2 найденными способами, но результат один и тот же.
1) Без регистрации в реестре
2) С регистрацией в реестре
Пробовала, как регистрировать с помощью
C:\Windows\Microsoft.NET\Framework\ v4.0.30319\RegAsm.exe "C:\..\Debug\Csarp.dll" /tlb
Так и самостоятельным созданием в консоли управления rusell.livejournal.com/143927

В итоге на компьютере, где компилирую проект, оба варианта работают. При переноси на другу машину, получаю одну и ту же ошибку «Безымянный.png”

Суть тестовых проектов одинаковая: создаю библиотеку COM на C#, подключаю к библиотеки С++ и вывожу в консоль С++, что бы проверить работает ли.

Буду рада, если подскажите, в чем ошибаюсь.


1) С#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace Charp
{
[ComVisible(true)] // Don't forget
[ClassInterface(ClassInterfaceType.A utoDual)] // these two lines
[Guid("7ABD37A5-FE77-4229-A544-4802ADEEAEA6")]
public class CharpCOM
{
public String GetTheThing(String arg) // Make sure this is public

{

MessageBox.Show("Привет");
return arg + "HelloForm";

}
}
}
C++ cpp
#include "stdafx.h"
#include <Windows.h>

#include <iostream>

#include <utility>
#include <limits.h>
#include "MyDLL.h"
#import "..\Charp\bin\Debug\Charp.tlb" raw_interfaces_only




const char* functionIMy()
{



CoInitialize(0); // Init COM
BSTR thing_to_send = ::SysAllocString(L"My thing, or ... ");
BSTR returned_thing;
Charp::_CharpCOMPtr obj(__uuidof(Charp::CharpCOM));
HRESULT hResult = obj->GetTheThing(thing_to_send, &returned_thing);


const char* hello = _com_util::ConvertBSTRToString(retu rned_thing);

return hello;

}
С++ h

#pragma once

#ifdef MATHLIBRARY_EXPORTS
#define MATHLIBRARY_API __declspec(dllexport)
#else
#define MATHLIBRARY_API __declspec(dllimport)
#endif



extern "C" MATHLIBRARY_API const char* functionIMy();

2) C# класс

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;

namespace Csarp
{
[ComVisible(true)] // Don't forget
// [ClassInterface(ClassInterfaceType.A utoDual)] // these two lines
[Guid("2005C5E0-CFB9-4A8A-9676-06671BBEE6AD")]
[ClassInterface(ClassInterfaceType.N one)]
[ProgId("Csarp.ClassMe")]
public class ClassMe : IInterface
{
private bool connected;

public void Connect()
{

MessageBox.Show("привет");

}

public void Disconnect()
{
MessageBox.Show("пока");
}

public void test()
{
MessageBox.Show("тест");
}

public void test2()
{
MessageBox.Show("тест2");
}
}
}

С# интерфейс

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;

namespace Csarp
{
[ComVisible(true)] // Don't forget
[Guid("2EB4A076-E600-4E0C-B7E0-5660CA5C2CD6")]
[InterfaceType(ComInterfaceType.Inte rfaceIsDual)]
public interface IInterface
{
void Connect();

void Disconnect();

void test();
void test2();
}
}

С++ h
#pragma once
#ifdef DLLFUNCTION_EXPORTS
#define DLLFUNCTION_API __declspec(dllexport)
#else
#define DLLFUNCTION_API __declspec(dllimport)
#endif


extern "C" DLLFUNCTION_API const char* connect();


extern "C" DLLFUNCTION_API const char* disconnect();


extern "C" DLLFUNCTION_API const char* test();


extern "C" DLLFUNCTION_API const char* test2();

C++ cpp
// Dllfunction.cpp : Определяет экспортированные функции для приложения DLL.
//

#include "stdafx.h"
#include <utility>
#include <limits.h>
#include "Dllfunction.h"

#import "..\Csarp\bin\Debug\Csarp.tlb"

const char* connect()
{
CoInitialize(NULL);

Csarp::IInterfacePtr yourClass(__uuidof(Csarp::ClassMe)) ;

yourClass->Connect();

CoUninitialize();
return "0";
}


const char* disconnect()
{
CoInitialize(NULL);

Csarp::IInterfacePtr yourClass(__uuidof(Csarp::ClassMe)) ;

yourClass->Disconnect();

CoUninitialize();
return "0";
}

const char* test()
{
CoInitialize(NULL);

Csarp::IInterfacePtr yourClass(__uuidof(Csarp::ClassMe)) ;

yourClass->test();

CoUninitialize();
return "0";
}

const char* test2()
{
CoInitialize(NULL);

Csarp::IInterfacePtr yourClass(__uuidof(Csarp::ClassMe)) ;

yourClass->test2();

CoUninitialize();
return "2";
}
Изображения
Тип файла: png Безымянный.png (8.0 Кб, 6 просмотров)
Irina_c вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаленно настроить на компьютере готовый проект в делфи ДмитрийРС Фриланс 5 13.06.2017 19:03
Программа тормозит только на конкретном компьютере Krasi Общие вопросы .NET 2 23.03.2016 15:26
не сохранять файл,только очистить, на другом компьютере kartol Microsoft Office Excel 5 17.01.2014 00:01
Qt5.1 не собирается проект SAMOUCHKA Qt и кроссплатформенное программирование С/С++ 2 18.08.2013 13:39
компьютер загружается только с диска Windows 7! Dzhem Windows 5 21.07.2010 11:16