Форум пользователей ПО АСКОН

Профессиональные вопросы => Программирование приложений => Visual Basic (VB, VBA, VB.NET) => Тема начата: Alexey_Ovtses от 09.10.11, 22:14:49

Название: Минимальная библиотека на VB.NET 2010 для КОМПАС 12
Отправлено: Alexey_Ovtses от 09.10.11, 22:14:49
Помогите, нужно сделать минимальную библиотеку на VB.NET (Visual Studio 2010) версия компаса - 12
На форуме были подобные темы, но ответа там не нашел.

пробовал сделать следующее:

1) в VS создаю проект Class Library
2) подключаю библиотеки
3) в настройках проекта включаю опцию "Register for COM interop"
4) в модуле класса пишу простейший код из SDK:

Цитировать
Public Class Class1

    ' Определить имя библиотеки
    Public Function GetLibraryName() As String
        GetLibraryName = "Самая простая библиотека на Visual Basic" ' Имя библиотеки
    End Function

    ' Головная функция библиотеки
    Public Sub ExternalRunCommand(ByVal command As Integer, ByVal mode As Integer, ByVal Kompas As Kompas6API5.Application)
        Kompas.ksMessage("Привет !!!")      ' Выдача сообщения пользователю
    End Sub

End Class

5) при попытке загрузить библиотеку ActiveX в компасе выдается ошибка "Неправильный формат компоненты"

если кто нибудь писал на VB.Net 2010 библиотеки выложите простейший исходник

прикрепляю исходники
Название: Re: Минимальная библиотека на VB.NET 2010 для КОМПАС 12
Отправлено: Sabahs от 11.10.11, 09:12:00
Visual Basic 6.0
Для хранения целочисленных данных предназначен тип integer. Служит для хранения целых чисел в диапазоне от —32768 до 32767 и занимает в оперативной памяти два байта.
VB.Net 2010
Short (вместо прежнего Integer), 16 битов.
Попробуйте заменить Integer на Short в функции ExternalRunCommand.
Название: Re: Минимальная библиотека на VB.NET 2010 для КОМПАС 12
Отправлено: Alexey_Ovtses от 11.10.11, 10:06:37
Попробовал, то же самое.
Вот еще что нашел, при попытке зарегистрировать Dll на другом компьютере выдалась ошибка

Цитировать
Модуль "ClassLibrary1.dll" загружен, но точка входа DllRegisterServer не найдена

может что то с настройками проекта не то?
Название: Re: Минимальная библиотека на VB.NET 2010 для КОМПАС 12
Отправлено: P.Vlasov от 12.10.11, 16:25:56
1. http://tinyurl.com/3jdrvz8
2. http://tinyurl.com/5sg9ca7
3. http://tinyurl.com/3p7cmc6
4. http://tinyurl.com/628o825
Название: Re: Минимальная библиотека на VB.NET 2010 для КОМПАС 12
Отправлено: 333 от 17.10.11, 09:28:10
Регистрировать теперь нужно через RegAsm
И самостоятельно придется прописывать ключь Kompas_Library как в примерах C#

В библиотеку требуется добавить функции
<ComRegisterFunctionAttribute()> _
  Friend Shared Sub RegisterKompasLib(ByVal typeToRegister As Type)
    Try
      Dim regKey As RegistryKey
      regKey = Registry.LocalMachine
      Dim keyName As String
      keyName = "SOFTWARE\Classes\CLSID\{" + typeToRegister.GUID.ToString() + "}"
      regKey = regKey.OpenSubKey(keyName, True)
      regKey.CreateSubKey("Kompas_Library")
      regKey = regKey.OpenSubKey("InprocServer32", True)
      regKey.SetValue(Nothing, System.Environment.GetFolderPath(Environment.SpecialFolder.System) + "\mscoree.dll")
      regKey.Close()

    Catch e As Exception
      MsgBox(e.Message, MsgBoxStyle.OkOnly)
    End Try

  End Sub

  <ComUnregisterFunctionAttribute()> _
  Friend Shared Sub UnregisterKompasLib(ByVal typeToRegister As Type)
    Dim regKey As RegistryKey
    regKey = Registry.LocalMachine
    Dim keyName As String
    keyName = "SOFTWARE\Classes\CLSID\{" + typeToRegister.GUID.ToString() + "}"
    regKey = regKey.OpenSubKey(keyName, True)
    regKey.DeleteSubKey("Kompas_Library")
    regKey.Close()
  End Sub
Название: Re: Минимальная библиотека на VB.NET 2010 для КОМПАС 12
Отправлено: 333 от 17.10.11, 09:31:49
Step1 после конвертации:

Imports System
Imports System.Runtime.InteropServices
'Imports Microsoft.WindowsMediaServices.Interop
Imports System.IO
Imports Microsoft.Win32

<System.Runtime.InteropServices.ProgId("Step1_NET.Step1")> Public Class Step1
   ' step1.cls - Самая простая библиотека на Visual Basic 6.0
   
   ' Определить имя библиотеки
   Public Function GetLibraryName() As String
      GetLibraryName = "Самая простая библиотека на Visual Basic 6.0" ' Имя библиотеки
   End Function
   
   ' Головная функция библиотеки
   'UPGRADE_NOTE: command was upgraded to command_Renamed. Click for more: 'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="A9E4979A-37FA-4718-9994-97DD76ED70A7"'
   Public Sub ExternalRunCommand(ByVal command_Renamed As Short, ByVal mode As Short, ByVal Kompas As Kompas6API5.Application)
      Kompas.ksMessage("Привет !!!") ' Выдача сообщения пользователю
  End Sub

+ функции из предыдующего сообщения
Название: Re: Минимальная библиотека на VB.NET 2010 для КОМПАС 12
Отправлено: Alexey_Ovtses от 18.10.11, 20:52:01
333 огромное спасибо, все заработало  :)
всем кому нужно вот рабочий исходник
Название: Re: Минимальная библиотека на VB.NET 2010 для КОМПАС 12
Отправлено: sergeylg от 21.10.11, 11:14:18
 Сделал как Alexey_Ovtses Вставил его пример. Компиляция на Visual Studio 2010 проходит а вот dll (Модуль "ClassLibrary1.dll" загружен, но точка входа DllRegisterServer не найдена ). Подскажите где еще искать. Компас КОМПАС-3D V13.
Название: Re: Минимальная библиотека на VB.NET 2010 для КОМПАС 12
Отправлено: 333 от 15.11.11, 14:31:27
Нужно регистрировать через RegAsm.exe
regsvr не работает
Название: Re: Минимальная библиотека на VB.NET 2010 для КОМПАС 12
Отправлено: z-arthur от 01.12.11, 14:58:12
Я хочу создать библиотеку на C# для Компас V11 (в VS 2010).

Выполнил требования в справке:

И я хочу подключить скомпилированную библиотеку на другом компьютере, где стоит Windows XP.
Но при подключении в Компас через вкладку ActiveX при нажатии на кнопку Добавить появляется ошибка "Неправильный формат компоненты".
А если регистрировать библиотеку утилитой RegAsm, библиотека появляется в списке вкладки ActiveX. Но при нажатии на кнопку Открыть появляется ошибка "Некорректная структура библиотеки. Библиотека не подключается".

Кто-нибудь может подсказать, что еще можно сделать?