问题标签 [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 投票
1 回答
2045 浏览

c# - 如何调试 C# 类库中的堆错误?

我在 C++ 应用程序中通过 COM 调用的 C# 库模块中出现堆损坏错误。具体错误是:

HEAP: Free Heap block 4b61bb8 在被释放后修改为 4b61be8
...
这可能是由于堆损坏,并表明 [app].exe 或它已加载的任何 DLL 中的错误。

调用堆栈的顶部是:

现在我的理解是 .NET 应该缓解内存问题,而不是让更多的内存问题无法修复。然而,我想不出我可能会做什么来导致内存错误,或者我可能会如何尝试修复它。特定模块使用 Microsoft.VisualStudio.VCProjectEngine .NET 组件通过非常简单的迭代器来迭代 VC 项目文件。在成功完成之前的大约 100 次调用之后,它在迭代 VCProject 过滤器(文件夹)中的文件时中断了 foreach 语句。正在破坏的实际代码是:

我怎么可能去调试呢?

更新:

当我从纯 C# 控制台应用程序(不涉及 COM 或本机代码)调用 if 时,我得到:

[component].dll 中出现“System.AccessViolationException”类型的未处理异常

附加信息:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。

仍然不知道如何进行调试。显然某处发生了内存错误......但是我如何在内存模型甚至没有暴露的纯托管代码中追踪它?

0 投票
3 回答
2502 浏览

c# - C# controls in a MFC Application

I am responsible for the User Interface of an application written completely in Visual C++ using MFC and some third-part controls. I would like to use C# (WinForms or even better WPF) to improve the application look&feel.

I would like some advices about how to do it. Links, articles, examples...

Right now the user interface is isolated in a single project and I don't want to compile the whole module with CLR. So how do I have to manage that from the architectural point of view?

I have already looked at the Internet for the subject and read MSDN information. I would like more detailed information...is it convinient? pros/cons? have you used this approach successfully in a "big" application? I don't want to compile the whole ui project with CLR...can I just have all the .NET code in a isolated project and call it from the ui project? what's the best way to do it?

Thanks in advance.

0 投票
6 回答
544 浏览

c# - C# - Java 互操作

你能给我一些关于使 C# 代码和 Java 代码互操作的建议吗?让我们将互操作定义为简单的事情:允许(从 Java 代码)对 C# 中定义的类进行实例化和方法调用,也可能反过来。

这甚至可以在本地实现吗?(即没有一些代理/骨架接口机制)

最后,可以使用哪些代理机制?(即两种语言领域都支持)

0 投票
6 回答
1427 浏览

c# - 将 C# 方法转换为 C++ 方法

我正在探索将常见 C# 代码构造映射到 C++ CUDA 代码以在 GPU 上运行的各种选项。系统结构如下(箭头代表方法调用):

C# 程序 -> C# GPU 库 -> C++ CUDA 实现库

GPU 库中的方法可能如下所示:

这是 ICollection<> 类型的扩展方法,它在每个元素上运行一个函数。但是,我想做的是调用 C++ 库并让它在 GPU 上运行方法。这将要求函数以某种方式翻译成 C++ 代码。这可能吗?

详细地说,如果我的库的用户执行一个方法(在 C# 中),其中包含一些任意代码,我想将此代码转换为 C++ 等效项,以便我可以在 CUDA 上运行它。我觉得没有简单的方法可以做到这一点,但我想知道是否有任何方法可以做到这一点或达到一些相同的效果。

我想知道的一件事是捕获要在表达式中翻译的函数,并使用它来将其映射到 C++ 等价物。有人有这方面的经验吗?

0 投票
2 回答
271 浏览

.net - 互操作控件未选择 XP 样式

我在 VS2005 中创建了一个 Interop 用户控件。当用户控件显示在 VB6 中时,它不会拾取/使用 XP 样式(按钮和选项卡看起来像 VB6 按钮/选项卡)。

在 VB6 中,如何让 XP 样式与我的控件一起使用?

0 投票
3 回答
6247 浏览

c# - 从 C# 访问 Win32 C/C++ 结构成员

我正在使用某种挂钩从 C# 拦截 Win32 API 调用本机 dll 或 exe。在这种特殊情况下,我对 user32.dll 中的 DrawText() 感兴趣。在 Win32 API 中是这样声明的:

LPRECT 结构具有以下签名(也在 Win32 API 中):

LONG 是 32 位系统上 32 位整数的 typedef(不了解 64 位系统,此时无关紧要,因为我在 32 位 Windows 上)。为了能够访问这个结构的成员,我在我的 C# 代码中声明了它......

...并使用此 RECT 结构编写了 P/Invoke 的签名:

由于结构是 C# 中的值类型,而不是 C/C++ 中的引用类型,因此此处需要 ref 修饰符。

但是,当我使用rect.top rect.leftetc 时,它们几乎总是返回 0。我知道这是不正确的事实。但是在谷歌搜索了无数小时并尝试了很多不同的东西之后,我无法让这个简单的东西发挥作用。

我尝试过的事情:

  • 对 RECT 成员使用不同的原语(int、long、short、UInt32...)。实际上很明显这不是类型问题,因为无论如何我应该看到一些乱码,而不是 0。
  • 删除 ref 修饰符。这也是愚蠢的(绝望的时候,绝望的措施),因为 rect.left 正确地返回指向 rect 的指针而不是它的值。
  • 尝试过unsafe的代码块。没用,但我可能在实现中犯了一个错误(我不记得我做了什么)。除了这种方法通常保留用于 COM 和 Win32 中棘手的指针情况,无论如何,这对我的情况来说是多余的。
  • 尝试[MarshallAs]在 RECT 成员之前添加。没区别。
  • 玩弄Pack价值观。没有不同。

我相当确定我错过了一些非常简单直接的东西,但我不知道它是什么......

任何帮助表示赞赏。谢谢你。

0 投票
3 回答
5030 浏览

.net - 有人可以解释在.Net 中使用主互操作程序集的好处吗?

这个概念对我来说是新的,一位同事提出了这个建议。可悲的是,我不知道他在说什么。有人可以启发我吗?

0 投票
5 回答
8724 浏览

c# - SendMessage 消息编号的解释?

我已经成功使用 Windows SendMessage 方法帮助我在我的文本编辑器中做各种事情,但每次我只是复制和粘贴别人建议的代码,我真的不知道它是什么意思。总是有一个神秘的消息编号是一个参数。我怎么知道这些代码数字的含义,以便我能够真正理解正在发生的事情并(希望)在未来更加自给自足?谢谢。

最近的例子:

0 投票
5 回答
2474 浏览

python - Ruby 到 Python 的桥梁

我有兴趣让一些 Python 代码在 Windows、Linux 和可能的其他平台上与一些 Ruby 代码对话。具体来说,我想从 Python 访问 Ruby 中的类并调用它们的方法、访问它们的数据、创建新实例等等。

一个明显的方法是通过 XML-RPC 或 CORBA 之类的方法,但我会对任何其他方法感兴趣。

其他人做了什么来让 Python 和 Ruby 的代码相互通信,无论是在同一系统上本地还是通过网络远程通信?

提前致谢。

0 投票
4 回答
2788 浏览

c# - F# 声明的命名空间在 c# 项目中不可用或通过对象浏览器可见

F# 声明的命名空间在 c# 项目中不可用或通过对象浏览器可见。

我已经构建了一个普通的 F# 库项目,但即使在我构建项目并将其引用到我的 C# 项目之后,我也无法访问所需的命名空间。

我也无法在对象浏览器中看到它,我收到一条错误消息,告诉我它尚未构建。我正在运行 9 月版本,有人可以指出我的错误吗?

F# 版本 1.9.6.0

(6)编辑:直接引用dll解决了我的问题,引用项目可以编译但智能不起作用。当直接引用 dll 时,智能工作完美。


这是在 .fs 文件中找到的代码


(5) 编辑:ReSharper 4.0 会是问题吗?

(4) 编辑:当我说对象浏览器无法读取生成的程序集时,我的意思是当我尝试在对象浏览器中打开程序集时,我收到一条错误消息,告诉我项目尚未构建。我再次可以使用反射器读取组件。

(3) 编辑:Reflector 可以反汇编 dll 但对象浏览器无法读取它。

(2) 编辑:我已将我的 F# 版本升级到 1.9.6.2,结果仍然相同

(1)编辑:我能够将 dll 反汇编为 C# 我得到:(这里一切似乎都很好)