线程化和托管/非托管互操作?

时间:2016-09-21 10:36:47

标签: c# multithreading c++-cli interop com-interop

背景

我正在开发一个项目,我需要为本机.exe x86二进制文件(使用microsoft的vc8编译器编译 - 本机c / c ++)创建补丁,以增强其功能并修复一些错误作为源代码这个.exe不可用。

实际上,我在本机c ++ dll中制作这些补丁,一旦将其加载到可执行文件的进程内存中,它就会在.exe的代码/数据中应用补丁。这种方法在稳定性方面效果很好,但是非常混乱且难以维护。因此,我提出了在原生c ++ dll中创建某种补丁引擎的想法,但将所有“高级”代码移动到c#dll。 “高级”代码我指的是与修补过程本身没有直接关系的任何代码(例如,假设我正在为该.exe创建一个全新的功能。与修补过程相关的代码将在native c ++ dll,它依次调用相应的c#函数来执行其他任何操作。)

我做了一些研究,发现可能最好的方法就是使用c ++ / cli的“IJW”在原生补丁引擎dll和c#dll中的“高级”代码之间建立桥梁(I需要这个在两个方向上工作。我需要从非托管代码调用c#函数的同样方法我需要从c#代码中调用.exe和补丁引擎dll的非托管函数。我还发现了使用COM互操作的可能性,但在网络主题中比较了人们声称要遵循IJW方法而不是COM互操作的两种方法。

问题

  • 对于这种特定情况,接受IJW方法是否优于COM互操作是否正确?
  • 使用此类IJW和COM互操作方法可能会遇到哪些问题?我主要关心的是线程细节;非托管.exe在单个线程中运行其代码,我不知道这些使用托管代码的修补方法将如何与线程相关 - c#代码将在单独的线程中执行吗? CLR会在此过程中创建任何其他线程吗?
  • 关于这整个想法的任何提示或技巧?

提前致谢并随时分享您认为可能对该主题有用的任何知识。

0 个答案:

没有答案