|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.12.2019, 11:04 | #1 |
Регистрация: 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"; } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Удаленно настроить на компьютере готовый проект в делфи | ДмитрийРС | Фриланс | 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 |