Я работаю над приложением, которое должно взаимодействовать через COM-интерфейс с несколькими приложениями CAD ( не одновременно ).Я хочу иметь хороший и многократно используемый код, , но я столкнулся с проблемами приведения типов COM-объектов, когда сделал общий метод получения дескриптора приложения.
Что я пробовал до сих пор:
Это попытка, которую я хотел бы больше всего, если бы она работала.
public static TCadAppType CadApp<TCadAppType>()
{
dynamic cadApp = default(TCadAppType);
//Here under Dynamic View/Message there is already an error
// Message = "Element not found. (Exception from HRESULT: 0x8002802B (TYPE_E_ELEMENTNOTFOUND))"
// cadVersion.Value evaluates to "SldWorks.Application"
cadApp = (TCadAppType)Marshal.GetActiveObject(cadVersion.Value);
//Following 2 lines of code are for testing purposes only, i am testing with Solidworks API
AssemblyDoc Assembly;
//The exception is thrown when I try to access some method from the Solidworks API
Assembly = (AssemblyDoc)cadApp.OpenDoc6("some parametras...");
}
Попытка использования класса Convert
// Another attempt using Convert class
public static TCadAppType CadApp<TCadAppType>()
{
dynamic cadApp = default(TCadAppType);
// cadVersion.Value evaluates to "SldWorks.Application"
cadApp = Marshal.GetActiveObject(cadVersion.Value);
cadApp = Convert.ChangeType(cadApp, typeof(SldWorks.SldWorks));
// Exception is thrown with the following message:
// Message = "Object must implement IConvertible."
}
Я действительно думал, что я на правильном пути, так как есть статьяна веб-сайте Microsoft Docs, где объясняется, как динамический может помочь вам с com interopt: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/using-type-dynamic#com-interop
Любые идеи , как я могу сделать это во время выполнения, приведя мой код в максимально возможное повторное использование?
Настройка моего программного обеспечения:
- Win 10
- Проект рассчитан на .NET 4.7.2
- Первые тесты в Solidworks 2019