问题标签 [interopservices]

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 回答
347 浏览

c# - 如何在 C# 中引用 .inl 和 .h 文件

更新1:

我想知道是否可以引用 .lib 文件,但似乎不能。如果这是真的,而且我没有 C++ 项目的源代码,我该如何使用它的方法?顺便说一句,我正在使用 FastCV 库。


我遇到了需要从 C# 代码调用 C++ 方法的情况。C++ 生成的文件结构:

我知道如何从 C# 调用 C++ 方法:

但我认为 .h 和 .inl 文件也需要包含在我的 C# 项目中。那么如何包含它们呢?

非常感谢。

0 投票
1 回答
8409 浏览

c# - 从 IntPtr 创建位图

我试图弄清楚如何使用有点不太清楚的 USB Video Camera API(至少它似乎依赖于开发人员以前的知识,而且我认为我不理解“全貌”,双关语)。

我有以下成功接收数据的事件处理程序,目前我只能打印到控制台:

这给了我这些结果:

因此,这与图像尺寸(1280 x 960)一致,1228800 是像素数(缓冲区大小),1for pixel format 表示PIXEL_FORMAT_08_MONO_OR_RAW按照相机 API 像素格式枚举(这也与此 BW 相机一致)。

我的问题是:

我怎样才能获取这些信息并System.Drawing.Bitmap用它创建一个对象?

我已经尝试过了,但没有成功(显然灰度图像实际上没有被索引......):

这最终会产生“通用 GDI+ 错误”。

0 投票
0 回答
64 浏览

c# - 消息 c# 上的 InteropServices 触发

长期读者,第一次在这里发布海报:)

我目前正在尝试学习如何使用互操作,并且想知道我是否可以以某种方式设置一个程序(程序 A),为另一个程序(程序 B)的弹出菜单添加一个附加选项。

编辑:程序 B 不是我的程序 I,所以我无法直接控制它。基本上程序 B 是我想添加附加功能的架子程序。

我想要实现的是以下

  1. 用户启动程序 A
  2. 用户启动程序 B
  3. 用户右键单击一个弹出菜单的对象(在程序 B 中)
  4. 用户选择选项 id 6(在程序 B 中)
  5. 程序 A 注意到这一点
  6. 程序 B 调出另一个弹出菜单(在程序 B 中)
  7. 程序 A 在程序 B 内的此菜单中添加了另一个选项
  8. 如果用户选择这个新选项,它会调用程序 A 中的一个函数。

这甚至可以通过 InterOp 实现吗?

0 投票
1 回答
804 浏览

c# - C# DllImport 未在上下文中找到,但 Interpor 服务绑定在

我的编译器出现问题,无法导入 kernel32.dll,尽管我使用的是 System.Runtime.InteropServices。这是代码:

它抛出一大堆语法错误和“在当前上下文中找不到“DllImport”。”

谢谢你的帮助。

0 投票
1 回答
2065 浏览

c# - 从 PowerBuilder 调用 .NET 程序集(向 COM 公开 .NET Framework 组件)

这里是编程环境。

  • 框架:ASP.NET 框架 4
  • 语言:Visual C# 2010,PowerBuilder 12.5.2 Build 5609 于 2014 年 1 月 2 日 01:29:51 构建

这是场景。

我正在创建一个 PowerBuilder 应用程序,它会启动一个带有多行编辑文本框的简单窗口,您可以在其中键入一些内容并单击一个按钮以加载一个 C# COM 类,该类检查拼写错误并将值返回给 PowerBuilder应用程序的文本框。

C# 类库.cs

C# MainWindow.xaml

C# MainWindow.xaml.cs

从 main 中的命令按钮单击类型 cb_1 的 PowerBuilder 事件

用于 main 的 PowerBuilder 实例变量

到目前为止,我想出的解决方案一直表现得很奇怪。从 PowerBuilder 应用程序中单击该按钮仅在启动 PowerBuilder 或部署的可执行文件后起作用一次,并且在再次尝试再次单击该按钮时将给出以下消息:

PowerBuilder 应用程序执行错误 (R0035)

应用程序终止。

错误:在 main 的对象 cb_1 的单击事件中,在第 11 行调用外部对象函数 checktext 时出错。

我应该从这些代码中更改什么以使其每次都能正常工作?

0 投票
0 回答
1031 浏览

c - 在 VB.NET 中修改 C 结构

我试图在我的 VB.NET 应用程序中使用别人用 C 编码的 DLL。我的 VB.NET 应用程序向 DLL 发送一些回调指针,然后 DLL 回调我的 VB.NET 应用程序内的函数。

DLL 在 VB.NET 中调用一个函数并传递一个 C 结构的指针。我的 VB.NET 应用程序必须修改结构值,因此 DLL 可以使用新的结构值。我不能修改 DLL 的代码,因为它是别人的 DLL。

我的 VB.NET 结构定义是

我的 VB.NET 委托被声明为

vb.net 将 vb.net 委托发送到 C DLL

我的 VB.NET 函数声明为

当函数结束时我得到以下错误,没有别的。

我尝试了不同的代码,例如Marshal.AllocHGlobal或将函数声明为

即使代码编译得很好,错误是由于 Marshal.StructureToPtr 不知何故,因为如果我将代码更改为如下代码,我不会收到任何错误,并且 DLL 会获得新值。唯一的问题是我必须手动计算 , 等的偏移report.input(0)report.input(1)

任何想法为什么代码失败?或者更简单的方法来修改从 DLL 发送的结构?

0 投票
1 回答
602 浏览

c# - 在 C# 中读写 C++ 动态数组(InteropServices)

我有一个 C++ 类,它有一个 header(matrixheader.h),这样:

类在(matrixbody.cpp)中定义如下: 它内置于Win32平台。

我已经为类制作了一个包装器,如下所示(matrixwrapper.cpp):包装器也是在 Win32 平台中构建的。

我将类导入 C# 并尝试从 C# 调用 C++ dl 方法:

但是当我尝试从 C# 运行 C++ dll 方法时,我收到以下错误

1//试图读取或写入受保护的内存。这通常表明在 x64 中运行 C# 代码时其他内存已损坏。

2//在x86 Active/x86或AnyCPU平台上运行时尝试加载格式不正确的程序。

问题:

1//上面的代码有什么问题?

2//考虑到我的最终目标是在C++中创建一个二维动态数组并在数组中读取/写入数据,例如C#上面matrixheader.h文件中的一个double**mat?还有其他方法可以实现吗?它 ?

0 投票
1 回答
227 浏览

c# - 带有 C++ dll 的 C# IteropServices - 在 excel 中工作?

我有一个 C++ dll,我正试图在我的 C# 项目中工作(我对 C++/C 一无所知,但确实有源代码并且可以在 VS2013 中打开和构建它)

该 dll 附带 Excel VBA 中的工作示例,但我无法让它在 C# 中工作。

我不断遇到的错误是......

附加信息:对 PInvoke 函数 'RMTest!RMTest.PInvokeTest::encode_eib_d' 的调用使堆栈失衡。这可能是因为托管的 PInvoke 签名与非托管的不匹配

我的 C# 测试代码如下...

作为参考,Excel中的工作示例,VBA如下......

C++ dll中的相关代码片段(据我所知)如下......

标题(.h):

.cpp

.def:

我已经在输入参数上尝试了 MarshalAs 等的各种组合以及尝试使用 StringBuilders 而不是字符串,但听起来好像对从一个到另一个的方法签名不满意。

令人沮丧的是它在VBA中工作。

如果您需要更多信息,请询问。

谢谢。

0 投票
2 回答
872 浏览

comexception - 应用程序中的 COM 异常

我正在尝试升级内部应用程序,基础设施将从 2008 年迁移到 windows server 2012 年。该应用程序从模型模板构建演示文稿。

我不断收到看起来与 Interops 相关联的附加 COM 异常,有没有人遇到过类似的事情。

PowerPages (Office 14.0)

文档:模型.ppt

命令:{SET PrevPeriodEnd user.PreviousPeriodEnd(PGFromDate)}

错误:

~~ 调用堆栈页面 6.9.1 (Build 021)~~

未找到成员。(来自 HRESULT 的异常:0x80020003 (DISP_E_MEMBERNOTFOUND))

堆栈跟踪:

在 Microsoft.Office.Interop.Word.ApplicationClass.Run(字符串 MacroName、Object& varg1、Object& varg2、Object& varg3、Object& varg4、Object& varg5、Object& varg6、Object& varg7、Object& varg8、Object& varg9、Object& varg10、Object& varg11、Object& varg12, Object& varg13, Object& varg14, Object& varg15, Object& varg16, Object& varg17, Object& varg18, Object& varg19, Object& varg20, Object& varg21, Object& varg22, Object& varg23, Object& varg24, Object& varg25, Object& varg26, Object& varg27,对象& varg29, 对象& varg30)

在 Pages.PowerPages.Evaluate.DoEvaluate(集合 cExpression)

在 Pages.PowerPages.Evaluate.Eval(字符串 sExpression)

在 Pages.PowerPages.Commands.HandleSet(字符串和 sStr、形状和 oShape、TextRange 和 oRange)

在 Pages.PowerPages.ProcessFile.ProcessShape(Presentation& oPresentation、Shape& shp、String& sOpenStr、String& sCloseStr、Boolean& bExit、Int32& nSlideID、Int32& nSlidesToReset、Boolean& bAgenda)

在 Pages.PowerPages.ProcessFile.ProcessPresentation(Presentation& oPresentation, String& sOpenStr, String& sCloseStr, Boolean& BMaster, Boolean& bAgenda)

在 Pages.PowerPages.modAmain.GenerateModel(String[]& aSelectedComponent, Boolean& bNormal)

在 Pages.PowerPages.modAmain.Generate2(布尔 bJobRun)

在 Pages.PowerPages.ComPowerPoint.Generate(字符串 sThreadID、Int32 nJobID、字符串 sPortcode、字符串 sManager、字符串 sBusinessUnit、Int32 nJobAccountStatusID、对象 oBatch、字符串 sOutputFolder、应用程序 oPowerPointApp)

~~~~ 附加信息 ~~~~

异常类型:COMException

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

计算机数据:

操作系统名称:Microsoft Windows Server 2012 R2 Standard

版本:6.2.9200.0

平台:Win32NT

物理内存 - 总计:4294430720,可用:2845433856

虚拟内存 - 总数:2147352576,可用:1652203520

0 投票
2 回答
2989 浏览

c# - Excel 中带有 interopServices C# 的 COMException

在某些机器上安装程序时,我遇到了一个非常烦人的问题,我开发了一个 C# 应用程序,一切正常,当然我在另一台机器上测试它没有问题,但是当我在我的客户端机器上安装它时,会出现以下问题:

System.Runtime.InteropServices.COMException (0x800A03EC):HRESULT 异常:System.RuntimeType.ForwardCallToInvokeMember 处的 0x800A03EC(字符串成员名称、BindingFlags 标志、对象目标、Int32 [] aWrapperTypes、MessageData 和 msgData)在 Microsoft.Office.Interop.Excel.Range .set__Default(Object RowIndex, Object ColumnIndex, Object ) at SchoolMgmt.certificate_succession.sum_operation()

由于程序与 Excel、Office Microsoft 通信(我尝试安装另一个 Office 版本但没有成功)。
我已经搜索了很多解决方案,但没有任何效果,因为它声称问题只是以下路径中的权限问题

C:\Windows\System32\config\SystemProfile

为什么程序在我的测试机器上运行顺利且成功,但在我的客户的机器上却没有,这真的让我发疯!
请有任何建议。