Ну как бы проблем особых не нашел, работает замечательно пример. Может у вас что посложнее, а может инициализируете просто иначе. Погоняю еще на 5.0.2 версии, может там нюансы есть какие, но не думаю.
Код на C#
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace Ex1
{
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDispatch)]
public class Ex1Class
{
public void ShowModule(object TCSApp, object TCSActiveModule)
{
try
{
CSDN.ITcs_Application app = (CSDN.ITcs_Application)TCSApp;
CSDN.IGModule module = (CSDN.IGModule)TCSActiveModule;
app.NmkClasses.get_ShowModal("Select class");
module.get_ShowModal("Hello from active module!");
for (int i = 0; i < module.ChildModules.ModulesCount; ++i)
{
CSDN.IPModule m = module.ChildModules.get_ModuleItems(i).AsIDispatch as CSDN.IPModule;
if (m != null) m.get_ShowModal("This is child module:" + module.ChildModules.get_ModuleItems(i).Caption);
}
}
catch (Exception e)
{
System.Windows.Forms.MessageBox.Show( e.ToString() );
}
}
}
}
Компилим, регистрируем COM объект.
Пишем вот такой макрос (например в номенклатурном справочнике )
Sub FormMacro_temp123(TCSActiveModule)
tag = TCSActiveModule.Tag 'Sorry, we should initialize our internal interfaces here
Set oo = CreateObject( "Ex1.Ex1Class" )
Call oo.ShowModule( TCSApp, TCSActiveModule )
End Sub
Запускаем, Смотрим как работает, выходим из программы - никаких ошибок не наблюдаю.