问题标签 [comvisible]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1947 浏览

c# - 调试 com 可见 dll 托管代码

我编写了一个 COM 可见的 dll,它将从本机 Win32 程序中调用。出于调试目的,我在包含 dll 的解决方案中添加了一个简单的 WinForms 客户端。

现在,当我在 dll 中设置断点时,该断点被命中,但我无法单步执行代码:调试器总是跳转到 dll 中的下一个断点,或者调用后的客户端中的第一行代码dll。

如何让调试器单步执行 dll 代码?

我认为它可能是“仅启用我的代码”选项,但没有设置。

更新 jdv 建议在项目属性中设置“启用非托管代码调试”,但这并没有达到预期的效果。

谢谢,米尔。

0 投票
1 回答
532 浏览

c# - 有没有可能用javascript调用C#函数?

我写了一个office插件,它有一个功能:openFile(String path),在office插件中我嵌入了一个浏览器对象,我可以在office插件上嵌入一个网页,现在我希望我可以调用C#函数“openFile”并用javascript传入网页中的路径,让office为我打开指定的文件。这可能吗 ?我能做些什么 ?

0 投票
1 回答
985 浏览

c# - 具有多个接口的 ObjectForScripting 不起作用

我有一个通过 ObjectForScripting 与 WebBrowserControl 交互的 WinForm。我的 WinForm 的基类不是 ComVisible,我不能或不会更改它。因为有一个 NonComVisibleBaseClass 我创建了一个接口并将其设置为 ComVisible(true) 并设置 FormAttribute [ClassInterface(ClassInterfaceType.None)]。接口中的方法可以被 JavaScript 调用。它完美无缺:

但现在我的问题。该接口包含多个功能。我想为单独的任务分组分离接口。所以我想要一个包含日志记录功能的接口和一个用于数据访问功能的接口等等。

所以它会是这样的:

但是当我这样做时,无法从 Javascript 访问第二个接口 (ILogging) 的功能。如果我切换接口的顺序,则无法访问 IDataAccess 函数。

所以似乎只有第一个接口中的方法可以在 Javascript 中访问。

我该怎么做才能使每个接口的每个功能都可以访问?再一次,使 BaseClass ComVisible 和删除 ClassInterface 属性将起作用,但不是一个选项。

提前致谢!!

0 投票
1 回答
957 浏览

visual-studio - 是否可以在 VS 不需要提升的情况下构建具有 COM 可见类型的 .NET DLL?

项目中的程序集具有标有 ComVisible(true) 的类型。

构建(非提升)时,VS 尝试注册该 DLL 并失败:

无法注册程序集“\path\to\foo.dll” - 访问被拒绝。请确保您以管理员身份运行该应用程序。拒绝访问注册表项“HKEY_CLASSES_ROOT\CLSID{FFC174A1-CC90-4E25-A3F6-C30B03368250}”。

我们真的不希望 DLL 在构建机器上注册。我们只想在为最终用户安装它时注册它。

那么是否可以在不注册 DLL 的情况下进行构建?

0 投票
1 回答
2170 浏览

c# - CA1017 ComVisible 与 VS2010 StyleCop 相关的错误

我收到 StyleCop 的 CA1017 错误消息,说我需要将其设为 ComVisible 为假。

然后,我将代码放在[assembly: ComVisible(false)]最顶层的命名空间之前。但是,我仍然收到相同的错误以及其他错误消息。

似乎VS2010也不识别这个名字。

在此处输入图像描述

这有什么问题?

0 投票
4 回答
3772 浏览

c# - ComVisible .NET 程序集和 app.config

  • 我有 .NET 程序集,其中一些类标记为ComVisible
  • 该程序集已注册regasm /codebase "assembly_path"
  • 我有 app.config 名称(实际上是 - MyAssemblyName.dll.config),它位于程序集的文件夹中
  • 我通过访问我的程序集中的 appSettingsConfigurationManager.AppSettings["SettingName"]
  • 我有 VBScript 文件,它通过CreateObject("...")
  • 创建对象时(从 VBScript),ConfigurationManager.AppSettings["SettingName"]返回 null。看起来程序集没有看到配置文件。

我应该怎么做才能使它可行?

0 投票
2 回答
1642 浏览

.net - 为 VB6 App 调试 Com-Visible DLL

我正在更新一个用 VB6 编写的应用程序。我想在 VS2010 中编写新代码并将其保存在 DLL 中。但我不知道如何调试 DLL 代码。我可以让它从 VS2010 中的测试应用程序中进入 DLL 代码,但不能从 VB6 中的真实应用程序中进入。有什么想法吗?

0 投票
0 回答
582 浏览

.net - 如何将 Delphi 空字符串传递给 com 可见的 .net 程序集

我有一个 C# 程序集,其中包含一个 ComVisible 类,其方法采用 2 个字符串参数。我已经注册了程序集并使用 Delphi XE2 的“导入组件”命令将其导入。

C# 界面如下所示:

导入的Delphi界面是这样的:

下面是如何从 Delphi 调用代码的示例:

只要我不将空字符串从我的 Delphi 应用程序传递给方法,一切都会 100% 工作。当我这样做时,我在 .Net 端收到以下错误:

检测到 InvalidVariant 消息:在从非托管 VARIANT 转换为托管对象期间检测到无效 VARIANT。将无效的 VARIANT 传递给 CLR 可能会导致意外异常、损坏或数据丢失。

理想情况下,我希望能够使用空字符串 '' 从 Delphi 端调用该方法,并在 .Net 端执行string.IsNullOrEmpty(guid)来检查这种情况。到目前为止,我所能做的就是将#0传递给方法,而不是从 Delphi 传递 '' 但在 .Net 端,值变为“\0”,它既不是 null 也不是空的。

处理这个问题的正确方法是什么?

谢谢。

0 投票
1 回答
1722 浏览

wpf - 使用 WPF WebBrowser 将字典传递给 ObjectForScripting

WebBrowser在 WPF 中使用一个组件来托管一些 JavaScript + HTML,并且我希望能够将可自定义的对象作为ObjectForScripting属性传递。我的最终目标是运行在 javascript 中的WebBrowser可以调用类似:

我可以通过实现一个ComVisible设置为它的类来实现接近此的目标,该类true具有一个lookup属性:

但是,我希望对ObjectForScripting传入的成员保持灵活,因此我无法事先指定每个属性是什么。

理想情况下,我只想指定一个名称-对象对来传递,但这不起作用。

到目前为止我已经尝试过(但失败了):

  • 使用 aDictionary<string,object>作为我的上下文
  • 使用的扩展Dictionary<string,object>被标记为ComVisible
  • 使用ExpandoObject
  • 用一个List<KeyValuePair<string,object>>
  • 使用的扩展 List<KeyValuePair<string,object>>被标记为ComVisible

有什么方法可以将可自定义的内容传递到我缺少ObjectForScripting的 WPF中吗?WebBrowser

0 投票
2 回答
3341 浏览

c# - 类未注册来自 PHP 的错误

我们创建了一个 C# 类库程序集并使其 COM 可见,以便能够从 PHP 调用其方法。这曾经可以正常工作,但现在我们想将它安装在 Windows Server 2008 服务器上,并且我们一直遇到错误“类未注册”。

为了排除任何依赖问题,我在 C# 中制作了一个很小的测试类库。类库是为任何 CPU 构建的,它是 COM 可见的(在 AssemblyInfo.cs 中也将 COMVisible 设置为 true)。测试类库只包含一个类和一种方法。该类称为TestLib,命名空间也称为TestLib。该方法称为 Test 并且只返回一个字符串。

我们所做的如下: - 构建 TestLib.dll - 将其复制到 Windows Server 2008 机器 - 将 dll 注册为:regasm /codebase TestLib.dll - regasm 工具返回成功消息 - 在 PHP 中,我们只是尝试创建一个新的 COM 实例:

  • 当我们从浏览器或命令行 (php -f test.php) 调用此测试脚本时,在这两种情况下都会出现错误“未注册类”

我还尝试使用 gacutil -i 将 TestLib 添加到 GAC,但无济于事;仍然类未注册错误。

然后我尝试使用 .NET 2.0 而不是 4.0 作为目标框架编译测试库,结果相同。.NET framework 4.0 顺便安装在服务器上。

有任何想法吗?