Я пытаюсь использовать сборку .NET из VB6 через interop без размещения его в GAC и без использования аргумента/codebase для regasm.exe..NET Interop: использование сборки в текущем каталоге
Из того, что я понимаю, когда я запускаю regasm.exe в библиотеке классов .NET, он создает запись реестра для каждого класса в библиотеке классов, сообщающую COM-клиентам, что они должны загружать mscoree.dll, которая служит в качестве прокси-упаковки Объекты .NET для использования COM. Mscoree.dll использует ключ InprocServer32/Assembly в реестре для определения класса, в котором библиотека классов содержит реализацию класса.
Если я использую/codebase с regasm.exe или помещаю свою библиотеку классов в GAC, все работает нормально; но, насколько я могу понять из разрозненной документации, mscoree.dll должен искать сборку в текущем каталоге и в пути, если/codebase не используется (и, следовательно, в реестре нет записи в CodeBase класс), и он не может найти его в GAC.
# код C так просто, как может быть:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace myinterop
{
[Guid("B1D6B9FE-A4C7-11DD-B06B-E93056D89593")]
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class MyServer
{
public int Add(int a, int b)
{
return a + b;
}
}
}
И проблема размножается с VBScript один лайнер, который я поставил в том же каталоге, что и скомпилированный DLL:
object = CreateObject("myinterop.MyServer")
Что я здесь пропал? Есть ли окончательное описание того, как mscoree.dll где-то ищет сборки?
BTW, я использую .NET 2.0 и да, я знаю, что должен помещать свои сборки в GAC, мне просто интересно, почему это не работает так, как рекламируется.
Не знал, что вы можете это сделать. Круто! – gooli 2008-10-28 10:28:27