问题标签 [interop]

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 投票
4 回答
8330 浏览

.net - .net 的 CUDA?

我知道有很多 CUDA 语言绑定,比如 PyCUDA,但是 .Net 有什么好的绑定吗?我见过的只有这一个,但我想知道是否还有其他的。

0 投票
5 回答
5072 浏览

c# - 从 C# 调用 FORTRAN DLL 的受保护内存冲突

我正在尝试调用从 FORTRAN 代码编译的旧版 dll。我是 Interop 的新手,但我已经阅读了一些关于它的文章,看起来我的案例应该相当简单。

我真正想调用的方法有一个复杂的方法签名,但我什至不能调用这个简单的 GetVersion 方法而不会得到受保护的内存冲突。

这是我的 DllImport 代码:

这是 FORTRAN 代码:

这是我失败的单元测试:

这是我收到的错误消息:

我尝试过的其他事情:

  • 使用默认编组
  • 传递 char[] 而不是字符串(改为获取方法签名错误)
0 投票
4 回答
4931 浏览

c# - C#项目设置“允许不安全代码”的实际作用是什么

我想知道 C# 项目设置“允许不安全代码”是否仅适用于项目本身中的不安全 C# 代码,或者在链接本机 C++ DLL 时是否需要设置此选项?如果在托管 DLL 中链接本身链接到本机 DLL 呢?这个选项到底在做什么?

0 投票
4 回答
15170 浏览

.net - 使用 .NET 互操作在 Adob​​e Reader 9 中以编程方式打印

我正在使用 VB.Net WinForms。我想调用 Adob​​e Reader 9 ActiveX 控件来打印一些 PDF。我已将 ActiveX 控件添加到 VS 工具箱(dll 为 AcroPDF.dll,COM 名称为“Adobe PDF Reader”。经过一些实验,以下代码有效。

如果没有 Yuk 位,这只会打印一些 PDF,看起来 End Using 语句在完成打印之前正在调用控件上的 dispose。

因此,对 printAll 的调用似乎是非阻塞的,但我找不到可以查询的回调或状态属性,以查看打印假脱机是否已完成。我错过了一个属性/方法,或者是否有更优雅(且响应更快)的解决方法?

0 投票
5 回答
2026 浏览

c# - SQL CE 3.5 部署问题,涉及 C# 和 C++ 之间的互操作

我们有一个 C# 应用程序正在使用 SQL CE 3.5 的情况。为了允许遗留程序使用它的一些特性,我们制作了一个 C++ dll,它使用互操作从 C# 程序中提取它需要的信息。为此,C# 程序需要访问数据库。它不是一个非常复杂的场景。

但是,在尝试使用私有安装进行部署时,会出现一些问题。 C#程序没有问题,它可以访问数据库并使用它没有任何问题。

但是,当尝试通过强制 C# 程序访问数据库的 C++ 互操作访问 C# 程序中的函数时,我们会遇到崩溃,异常说“......提供者:System.Data.SqlServerCe.3.5 是未安装”。

这显然是因为我们无法将 App.config 文件添加到正在执行的程序中。

我们怎样才能解决这个问题?还有其他方法可以解决这个问题吗?任何其他形式的 SQL CE 3.5 安装方法都是不可能的。所以我们必须让它发挥作用。

问候,

编辑:

我不是直接针对 SQL CE,而是通过 Linq2SQL。我试图将配置文件添加到我所有的 dll 中,它没有帮助。似乎只有可执行文件是否有 app.config 才重要。

抛出的异常说 - 未安装提供程序 System.Data.SqlServerCe.3.5。

根据堆栈跟踪要调用的最新函数是 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Initialize(...)。

编辑 2

我已经添加了部署工作所需的所有文件。正如我在上面所写的,如果我通过一个带有 app.config 文件的 .net 可执行文件使用程序 dll(它使用 Linq 2 Sql),它指定在哪里查找 SQL CE 3.5 dll。部署不能只使用文件,需要一个 app.config 文件。

问题是我们必须通过 C++ 可执行文件来使用 dll 文件,它无法告诉 .net 在哪里寻找 Sql Ce 3.5 dll。

0 投票
8 回答
1978 浏览

c# - Vista,Office 互操作不工作

有谁知道如何让 MS Office 2007 .NET C# Interop 库与 Vista 一起使用?

我有一个已设置为作为 Windows 服务运行的 .NET C# 应用程序。该程序将根据情况打开一个 Word 或 Excel 模板并修改其内容,然后将文档保存回来。当我在使用 Office 2007 的 Windows Server 2003 或 XP 机器上执行此操作时,所有这些都非常有效。当我将所有内容移至 Server 2008 机器时,一切都停止工作了。例如,在 Excel 中,我收到一个 COM 异常,告诉我当文件明显存在时无法打开 Excel 文件,而我可以在手动打开它时很好地打开它。Windows 服务在我登录机器的同一用户帐户下运行,该帐户是管理员。

有谁知道该怎么做?

0 投票
3 回答
3600 浏览

c# - COM 互操作是否尊重程序集加载的 .NET AppDomain 边界?

这是核心问题:我有一个在单独的 AppDomain中使用COM 互操作的 .NET 应用程序。COM 东西似乎正在将程序集加载回默认域,而不是从中调用 COM 东西的 AppDomain。

我想知道的是:这是预期的行为,还是我做错了什么导致这些与 COM 相关的程序集被加载到错误的 AppDomain 中?请参阅下面对情况的更详细描述...

该应用程序由 3 个程序集组成: - 主 EXE,应用程序的入口点。- common.dll,只包含一个接口 IController(IPlugin 样式) - controller.dll,包含一个实现 IController 和 MarshalByRefObject 的 Controller 类。此类完成所有工作并使用 COM 互操作与另一个应用程序进行交互。

主 EXE 的相关部分如下所示:

common.dll 仅包含以下两件事:

并且 controller.dll 包含这个类(它也调用 COM 互操作的东西):

首次运行应用程序时,Assembly.GetAssemblies() 看起来与预期一样,common.dll 加载到两个 AppDomains 中,而 controller.dll 仅加载到控制器域中。但是,在调用 c.Run() 之后,我看到与 COM 互操作相关的程序集已加载到默认的 AppDomain 中,而不是在发生 COM 互操作的 AppDomain 中。

为什么会发生这种情况?

如果你有兴趣,这里有一点背景:

最初这是一个 1 AppDomain 应用程序。它与之交互的 COM 东西是一个服务器 API,长期使用并不稳定。当 COM 发生 COMException(没有关于其原因的有用诊断信息)时,必须重新启动整个应用程序,然后 COM 连接才能再次工作。简单地重新连接到 COM 应用程序服务器会再次立即导致 COM 异常。为了解决这个问题,我尝试将 COM 互操作的东西移动到一个单独的 AppDomain 中,这样当神秘的 COMExceptions 发生时,我可以卸载它发生的 AppDomain,创建一个新的并重新开始,而无需手动重新启动应用程序. 反正就是这个理论...

0 投票
2 回答
1379 浏览

c# - .NET 互操作:使用当前目录中的程序集

我正在尝试通过互操作使用 VB6 中的 .NET 程序集,而不将其放置在 GAC 中,并且不使用 regasm.exe 的 /codebase 参数。

据我了解,当我在 .NET 类库上运行 regasm.exe 时,它​​会为类库中的每个类创建一个注册表项,告诉 COM 客户端他们应该加载 mscoree.dll,它充当包装 .NET 对象的代理COM 使用。Mscoree.dll 使用类的注册表中的 InprocServer32/Assembly 键来确定哪个类库包含该类的实现。

如果我将 /codebase 与 regasm.exe 一起使用或将我的类库放在 GAC 中,一切正常;但据我从分散的文档中可以看出,如果 /codebase 尚未使用,mscoree.dll 应该在当前目录和路径中查找程序集(因此注册表中没有 CodeBase 条目类)并且在 GAC 中找不到它。

C# 代码尽可能简单:

并且这个问题通过我放在与编译的 DLL 相同的目录中的 VBScript 一行来重现:

我在这里想念什么?mscoree.dll 在某处查找程序集的方式是否有明确的描述?

顺便说一句,我使用的是 .NET 2.0,是的,我知道我应该将我的程序集放在 GAC 中,我只是想知道为什么这不像宣传的那样工作。

0 投票
1 回答
4895 浏览

c# - 从 C++ 调用 C# dll 时如何使用 app.config 文件

从 C++ 调用 .Net dll 时,如何将app.config文件用于 .Net 部分,并且必须在 .Net 运行时启动时读取配置文件中的数据。

如果我使用foo.dll.config我调用的有一个,ConfigurationManager.OpenExeConfiguration("foo.dll")我可以访问应用程序设置。不过,我想做的是更改 中的一些信息<system.data>,即删除 aDbProviderFactory并将其替换为新的。

似乎只有将代码放在 exectubalesapp.config文件中才能做到这一点。

但是当我从 C++ 调用 .Net 代码时,我的可执行文件不能有 app.config。

是否有某种方法可以指定machine.config在 .Net 运行时启动后肯定会立即运行的配置文件,即使我通过 C++ 调用 .Net dll 也是如此?

0 投票
2 回答
192 浏览

java - 如何从 JSP 页面加载 COM 对象?

我正在开发一个 JSP 应用程序并被迫加载一个 COM 对象。这样的事情能做到吗?

如果是,如何?