Минимальная библиотека на VB.NET 2010 для КОМПАС 12

Автор Alexey_Ovtses, 09.10.11, 22:14:49

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Alexey_Ovtses

Помогите, нужно сделать минимальную библиотеку на 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 библиотеки выложите простейший исходник

прикрепляю исходники

Visual Basic 6.0
Для хранения целочисленных данных предназначен тип integer. Служит для хранения целых чисел в диапазоне от —32768 до 32767 и занимает в оперативной памяти два байта.
VB.Net 2010
Short (вместо прежнего Integer), 16 битов.
Попробуйте заменить Integer на Short в функции ExternalRunCommand.

Alexey_Ovtses

Попробовал, то же самое.
Вот еще что нашел, при попытке зарегистрировать Dll на другом компьютере выдалась ошибка

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

может что то с настройками проекта не то?


333

Регистрировать теперь нужно через 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

333

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: '[url="ms-help://ms.vscc.v80/dv_commoner/local/redirect.htm?keyword="A9E4979A-37FA-4718-9994-97DD76ED70A7"'"]ms-help://ms.vscc.v80/dv_commoner/local/redirect.htm?keyword="A9E4979A-37FA-4718-9994-97DD76ED70A7"'[/url]
   Public Sub ExternalRunCommand(ByVal command_Renamed As Short, ByVal mode As Short, ByVal Kompas As Kompas6API5.Application)
      Kompas.ksMessage("Привет !!!") ' Выдача сообщения пользователю
  End Sub

+ функции из предыдующего сообщения

Alexey_Ovtses

333 огромное спасибо, все заработало  :)
всем кому нужно вот рабочий исходник

sergeylg

 Сделал как Alexey_Ovtses Вставил его пример. Компиляция на Visual Studio 2010 проходит а вот dll (Модуль "ClassLibrary1.dll" загружен, но точка входа DllRegisterServer не найдена ). Подскажите где еще искать. Компас КОМПАС-3D V13.

333

Нужно регистрировать через RegAsm.exe
regsvr не работает

z-arthur

Я хочу создать библиотеку на C# для Компас V11 (в VS 2010).

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

  • В свойствах проекта (Configuration Properties - Build) включил опцию Register for COM Interop
  • Создал DLL-обертки для TLB Компас API с помощью утилиты TlbImp.exe
  • Добавил методы RegisterKompasLib и UnregisterKompasLib
  • Добавил атрибут для класса [ComVisible(true)]

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

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