C ++ COM CoCreateInstace () возвращает -858993460

У меня есть сторонняя DLL-библиотека .NET, которую я хочу предоставить нативной C ++ dll, поэтому я написал dll-оболочку на C #; Но в нативной C ++ dll, каждый раз, когда он оправдывается CoCreateInstance (), он возвращает это -858993460 erroe;

———————-Ниже приведена структура программы ——————

ThorDetectorSwitch.dll (родной C ++ dll) -> MCLWrapper.dll (COM C # dll) -> mcl_RF_Switch_Controller64.dll (третья часть .NET dll)

———————-Ниже приведен некоторый мой код ————————

DLL-оболочка C # (MCLWrapper.dll, DLL вызываемой оболочки COM):

// C# COM wrapper for mcl_RF_Switch_Controller64.dll
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using mcl_RF_Switch_Controller64;
using System.Runtime.InteropServices;
// for function reference see miniCircuit RF controller manual

namespace MCLWrapper
{
[Guid("727C569D-09AF-472c-8032-2AC9BC7CDC30")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[ComVisible(true)]
public interface MCLControl
{
[DispId(1)]
void Connect(string SerialNumber);

[DispId(2)]
void Set_Switch(string SwitchName, int Val);

[DispId(3)]
void Set_SwitchesPort(byte binVal);

[DispId(4)]
void GetSwitchesStatus(int statusRet);

[DispId(5)]
void Disconnect();
};

[Guid("68A7F8A1-6347-4bb1-9809-EE18E1E9BDD6")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("MCLWrapper.MCLControlClass")]
public class MCLControlClass : MCLControl
{
public USB_RF_SwitchBox _sb = new USB_RF_SwitchBox();

//public MCLControlClass() { }
public void Connect(string SerialNumber)
{
_sb.Connect(ref SerialNumber);
}

public void Set_Switch(string SwitchName, int Val)
{
_sb.Set_Switch(ref SwitchName, ref Val);
}

public void Set_SwitchesPort(byte binVal)
{
_sb.Set_SwitchesPort(ref binVal);
}

public void GetSwitchesStatus(int statusRet)
{
_sb.GetSwitchesStatus(ref statusRet);
}

public void Disconnect()
{
_sb.Disconnect();
}
}
}

Конструктор ThorDetctorSwitch.dll (собственный C ++, который вызывает CCW MCLWrapper.dll):

#import "../MCLWrapper/MCLWrapper/bin/Debug/MCLWrapper.tlb" raw_interfaces_only

using namespace MCLWrapper;

MCLWrapper::MCLControl *_mcSwitch;

ThorDetectorSwitch::ThorDetectorSwitch()
{
HRESULT hr = CoInitialize(NULL);
MCLWrapper::MCLControlPtr mclSmartPtr;
hr = ::CoCreateInstance(__uuidof(MCLWrapper::MCLControlClass), NULL,CLSCTX_ALL, __uuidof(MCLWrapper::MCLControl), (void**)&mclSmartPtr    );
_mcSwitch = mclSmartPtr;

_A  = WstringToBSTR(L"A");
_B  = WstringToBSTR(L"B");
_C  = WstringToBSTR(L"C");
_D  = WstringToBSTR(L"D");

_deviceDetected = FALSE;
}

Командная строка, которую я использовал для регистрации MCLWrapper.dll

regasm MCLWrapper.dll /tlb:MCLWrapper.tlb /codebase

и возвращает реестр успешно.

Ошибка:
Ошибка происходит в

hr = ::CoCreateInstance(__uuidof(MCLWrapper::MCLControlClass), NULL,CLSCTX_ALL, __uuidof(MCLWrapper::MCLControl), (void**)&mclSmartPtr    );

и я не думаю, что эта линия полностью оправдана.

У кого-нибудь есть идеи? Большое спасибо.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …