Файл проекта (LIBTOOBA.csproj):
Код: Выделить всё
net6.0
enable
enable
AnyCPU
DLLS\Interop.TSMSLIB_TLB.dll
True
- Имя: Interop.TSMSLIB_TLB
- Работает на целевой платформе: x86.
Код: Выделить всё
namespace LIBTOOBA
{
class Authentication
{
//...
}
class Proxy
{
//...
}
using TSMSLIB_TLB;
class TSMS
{
private Authentication a = new Authentication();
public Authentication A
{
set { this.a = value; }
get { return this.a; }
}
private TSMS_Tooba t = new TSMS_Tooba();
public TSMS_Tooba T
{
set { this.t = value; }
get { return this.t; }
}
public void init()
{
t.UserName = this.a.UserName;
t.Password = this.a.PassWord;
t.LibKey = this.a.LibKey;
t.ProxyServer = this.p.Server;
t.ProxyPort = this.p.Port;
t.ProxyUserName = this.p.UserName;
t.ProxyPassword = this.p.PassWord;
}
}
}
Код: Выделить всё
namespace LIBTOOBA
{
public class CL_TOOBASMS
{
private readonly TSMS CL_SMS;
public CL_TOOBASMS(string userName, string password, string libKey)
{
// Validate inputs
if (string.IsNullOrWhiteSpace(userName))
throw new ArgumentException("Username cannot be null or empty", nameof(userName));
if (string.IsNullOrWhiteSpace(password))
throw new ArgumentException("Password cannot be null or empty", nameof(password));
if (string.IsNullOrWhiteSpace(libKey))
throw new ArgumentException("LibKey cannot be null or empty", nameof(libKey));
CL_SMS = new TSMS();
try
{
CL_SMS.A.UserName = userName;
CL_SMS.A.PassWord = password;
CL_SMS.A.LibKey = libKey;
}
catch (Exception ex)
{
throw new InvalidOperationException("Failed to set SMS library credentials.", ex);
}
}
public (string Number, int Credit, int UsedCredit, string LastDate) GetMyAccountInfo()
{
//...
return (number, credit, usedCredit, lastDate);
}
public string GetDeliveryInfo(string sendToNumber, string sendEvent)
{
//...
return delivery;
}
public string SendSMS(string sendToNumber, string sendMsg)
{
//...
return sendEventTxt;
}
}
}
У меня есть приложение WPF .NET Core 6 с целевой платформой, установленной на AnyCPU (x64). Когда я добавляю библиотеку «LIBTOOBA» и пытаюсь запустить приложение, я получаю следующую ошибку:
Код: Выделить всё
System.Runtime.InteropServices.COMException: 'Retrieving the COM class factory for component with CLSID {83A108DD-D51F-43AF-9290-00541698F0F9} failed due to the following error: 80040154 Class not registered (0x80040154 (REGDB_E_CLASSNOTREG)).'
Если я изменю целевую платформу WPF на x86, она запустится успешно. Однако я хочу сохранить свое приложение WPF .NET Core 6 на целевой платформе AnyCPU (x64). Как обойти эту проблему?
Потенциальные решения, которые я рассматриваю:
[*]"Side-by-side" COM активация: загрузить 32-битный COM-компонент в 64-битный процесс.
[*]PInvoke (Platform Invoke) для вызова функций непосредственно из неуправляемых DLL.
[*]Отдельный 32-битный процесс для COM-взаимодействия.
[*]Используйте CorFlags для принудительного выполнения x86.
[*]Создайте оболочку C++/CLI.
< /ul>
Будем очень признательны за любые предложения или рекомендации по реализации того или иного решения или другого подхода.
Я хочу сохранить свой WPF .NET Core 6 Приложение на платформе, предназначенной для AnyCPU (x64). Как это обойти?
Подробнее здесь: https://stackoverflow.com/questions/788 ... pplication
Мобильная версия