Tag: comvisible

来自PHP的类未注册错误

我们已经创建了一个C#类库程序集,并使其可见,以便能够从PHP调用其方法。 这曾经工作正常,但现在我们想在Windows Server 2008服务器上安装它,我们继续进入错误“Class not registered”。 为了排除任何依赖性问题,我在C#中创建了一个小小的测试类库。 类库是为Any CPU构建的,它是COM可见的(在AssemblyInfo.cs中也将COMVisible设置为true)。 测试类库只包含一个带有一个方法的类。 该类称为TestLib,名称空间也称为TestLib。 该方法称为Test,仅返回一个字符串。 我们所做的是以下内容: – 构建TestLib.dll – 将其复制到Windows Server 2008计算机 – 使用以下命令注册dll:regasm / codebase TestLib.dll – regasm工具返回成功消息 – 在PHP中我们只是尝试创建一个新的COM实例: try { $test = new COM(“TestLib.TestLib”); } catch (Exception $e) { die($e->getMessage()); } 当我们从浏览器或命令行(php -f test.php)调用此测试脚本时,我们在两种情况下都会收到错误“Class not registered” 我也尝试使用gacutil -i将TestLib添加到GAC,但无济于事; 仍然没有注册错误的类。 然后我尝试使用.NET 2.0而不是4.0作为目标框架编译testlibrary,结果相同。 顺便说一下,.NET Framework 4.0安装在服务器上。 有任何想法吗?

在C ++ / CLI中是可见的

我正在将C ++转换为C ++ / CLI,并希望将一些托管类公开为COM对象。 在C#中它很容易并且设置[ComVisible]并inheritance自接口(也是ComVisible)完成了这项工作。 但是,作为C ++ / CLI的C ++项目构建不会导出DllRegisterServer。 这是示例项目(从VS 2008中的CLR控制台应用程序项目开始)。 #include “stdafx.h” using namespace System; using namespace System::Runtime::InteropServices; [ComVisible(true)] [Guid(“E3CF8A18-E4A0-4bc3-894E-E9C8648DC1F0”)] [InterfaceType(ComInterfaceType::InterfaceIsDual)] public interface class ITestInterface { void TestMethod(); }; [ComVisible(true)] [Guid(“1514adf6-7cb0-4561-9fbb-b75c0467149b”)] public ref class CliComClass : ITestInterface { public: virtual void TestMethod() { } }; int main(array ^args) { Console::WriteLine(L”Hello World”); return […]

与默认和公共类COM暴露有什么关系?

MSDN有关于[ComVisible]属性的这篇文章 。 当设置[ComVisible(true)]时,我不太清楚会发生什么。 MSDN说 默认值为true ,表示托管类型对COM可见。 不需要此属性来使公共托管程序集和类型可见 ; 它们默认情况下对COM可见。 只有公共类型可见。 所以他们说公共类型默认是COM可见的。 但是他们也说通过设置[ComVisible(true)] 只能看到公共类型 。 它没有意义:如果默认情况下公共类型是可见的,那么设置[ComVisible(true)]使公共类型可见? 如果它们已经可见,它们将如何变得更加明显? 也许我的理解不正确。 如果有人能对上述陈述有所了解,我将不胜感激。