问题标签 [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.
.net - .net 的 CUDA?
我知道有很多 CUDA 语言绑定,比如 PyCUDA,但是 .Net 有什么好的绑定吗?我见过的只有这一个,但我想知道是否还有其他的。
c# - 从 C# 调用 FORTRAN DLL 的受保护内存冲突
我正在尝试调用从 FORTRAN 代码编译的旧版 dll。我是 Interop 的新手,但我已经阅读了一些关于它的文章,看起来我的案例应该相当简单。
我真正想调用的方法有一个复杂的方法签名,但我什至不能调用这个简单的 GetVersion 方法而不会得到受保护的内存冲突。
这是我的 DllImport 代码:
这是 FORTRAN 代码:
这是我失败的单元测试:
这是我收到的错误消息:
我尝试过的其他事情:
- 使用默认编组
- 传递 char[] 而不是字符串(改为获取方法签名错误)
c# - C#项目设置“允许不安全代码”的实际作用是什么
我想知道 C# 项目设置“允许不安全代码”是否仅适用于项目本身中的不安全 C# 代码,或者在链接本机 C++ DLL 时是否需要设置此选项?如果在托管 DLL 中链接本身链接到本机 DLL 呢?这个选项到底在做什么?
.net - 使用 .NET 互操作在 Adobe Reader 9 中以编程方式打印
我正在使用 VB.Net WinForms。我想调用 Adobe Reader 9 ActiveX 控件来打印一些 PDF。我已将 ActiveX 控件添加到 VS 工具箱(dll 为 AcroPDF.dll,COM 名称为“Adobe PDF Reader”。经过一些实验,以下代码有效。
如果没有 Yuk 位,这只会打印一些 PDF,看起来 End Using 语句在完成打印之前正在调用控件上的 dispose。
因此,对 printAll 的调用似乎是非阻塞的,但我找不到可以查询的回调或状态属性,以查看打印假脱机是否已完成。我错过了一个属性/方法,或者是否有更优雅(且响应更快)的解决方法?
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。
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 服务在我登录机器的同一用户帐户下运行,该帐户是管理员。
有谁知道该怎么做?
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,创建一个新的并重新开始,而无需手动重新启动应用程序. 反正就是这个理论...
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 中,我只是想知道为什么这不像宣传的那样工作。
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 也是如此?
java - 如何从 JSP 页面加载 COM 对象?
我正在开发一个 JSP 应用程序并被迫加载一个 COM 对象。这样的事情能做到吗?
如果是,如何?