Помогите, нужно сделать минимальную библиотеку на 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.
Попробовал, то же самое.
Вот еще что нашел, при попытке зарегистрировать Dll на другом компьютере выдалась ошибка
Цитировать
Модуль "ClassLibrary1.dll" загружен, но точка входа DllRegisterServer не найдена
может что то с настройками проекта не то?
1. http://tinyurl.com/3jdrvz8
2. http://tinyurl.com/5sg9ca7
3. http://tinyurl.com/3p7cmc6
4. http://tinyurl.com/628o825
Регистрировать теперь нужно через 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
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
+ функции из предыдующего сообщения
333 огромное спасибо, все заработало :)
всем кому нужно вот рабочий исходник
Сделал как Alexey_Ovtses Вставил его пример. Компиляция на Visual Studio 2010 проходит а вот dll (Модуль "ClassLibrary1.dll" загружен, но точка входа DllRegisterServer не найдена ). Подскажите где еще искать. Компас КОМПАС-3D V13.
Нужно регистрировать через RegAsm.exe
regsvr не работает
Я хочу создать библиотеку на 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. Но при нажатии на кнопку Открыть появляется ошибка "Некорректная структура библиотеки. Библиотека не подключается".
Кто-нибудь может подсказать, что еще можно сделать?