问题标签 [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.
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”类型的未处理异常
附加信息:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
仍然不知道如何进行调试。显然某处发生了内存错误......但是我如何在内存模型甚至没有暴露的纯托管代码中追踪它?
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.
c# - C# - Java 互操作
你能给我一些关于使 C# 代码和 Java 代码互操作的建议吗?让我们将互操作定义为简单的事情:允许(从 Java 代码)对 C# 中定义的类进行实例化和方法调用,也可能反过来。
这甚至可以在本地实现吗?(即没有一些代理/骨架接口机制)
最后,可以使用哪些代理机制?(即两种语言领域都支持)
c# - 将 C# 方法转换为 C++ 方法
我正在探索将常见 C# 代码构造映射到 C++ CUDA 代码以在 GPU 上运行的各种选项。系统结构如下(箭头代表方法调用):
C# 程序 -> C# GPU 库 -> C++ CUDA 实现库
GPU 库中的方法可能如下所示:
这是 ICollection<> 类型的扩展方法,它在每个元素上运行一个函数。但是,我想做的是调用 C++ 库并让它在 GPU 上运行方法。这将要求函数以某种方式翻译成 C++ 代码。这可能吗?
详细地说,如果我的库的用户执行一个方法(在 C# 中),其中包含一些任意代码,我想将此代码转换为 C++ 等效项,以便我可以在 CUDA 上运行它。我觉得没有简单的方法可以做到这一点,但我想知道是否有任何方法可以做到这一点或达到一些相同的效果。
我想知道的一件事是捕获要在表达式中翻译的函数,并使用它来将其映射到 C++ 等价物。有人有这方面的经验吗?
.net - 互操作控件未选择 XP 样式
我在 VS2005 中创建了一个 Interop 用户控件。当用户控件显示在 VB6 中时,它不会拾取/使用 XP 样式(按钮和选项卡看起来像 VB6 按钮/选项卡)。
在 VB6 中,如何让 XP 样式与我的控件一起使用?
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.left
etc 时,它们几乎总是返回 0。我知道这是不正确的事实。但是在谷歌搜索了无数小时并尝试了很多不同的东西之后,我无法让这个简单的东西发挥作用。
我尝试过的事情:
- 对 RECT 成员使用不同的原语(int、long、short、UInt32...)。实际上很明显这不是类型问题,因为无论如何我应该看到一些乱码,而不是 0。
- 删除 ref 修饰符。这也是愚蠢的(绝望的时候,绝望的措施),因为 rect.left 正确地返回指向 rect 的指针而不是它的值。
- 尝试过
unsafe
的代码块。没用,但我可能在实现中犯了一个错误(我不记得我做了什么)。除了这种方法通常保留用于 COM 和 Win32 中棘手的指针情况,无论如何,这对我的情况来说是多余的。 - 尝试
[MarshallAs]
在 RECT 成员之前添加。没区别。 - 玩弄
Pack
价值观。没有不同。
我相当确定我错过了一些非常简单直接的东西,但我不知道它是什么......
任何帮助表示赞赏。谢谢你。
.net - 有人可以解释在.Net 中使用主互操作程序集的好处吗?
这个概念对我来说是新的,一位同事提出了这个建议。可悲的是,我不知道他在说什么。有人可以启发我吗?
c# - SendMessage 消息编号的解释?
我已经成功使用 Windows SendMessage 方法帮助我在我的文本编辑器中做各种事情,但每次我只是复制和粘贴别人建议的代码,我真的不知道它是什么意思。总是有一个神秘的消息编号是一个参数。我怎么知道这些代码数字的含义,以便我能够真正理解正在发生的事情并(希望)在未来更加自给自足?谢谢。
最近的例子:
python - Ruby 到 Python 的桥梁
我有兴趣让一些 Python 代码在 Windows、Linux 和可能的其他平台上与一些 Ruby 代码对话。具体来说,我想从 Python 访问 Ruby 中的类并调用它们的方法、访问它们的数据、创建新实例等等。
一个明显的方法是通过 XML-RPC 或 CORBA 之类的方法,但我会对任何其他方法感兴趣。
其他人做了什么来让 Python 和 Ruby 的代码相互通信,无论是在同一系统上本地还是通过网络远程通信?
提前致谢。
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# 我得到:(这里一切似乎都很好)