网上有些进程外的一些资料,但有些简单,研究了两天写了demo,可利用这种方式解决64位的程序调用32位的dll等问题,但注意方法参数不能含有IntPtr,因为指针跨进程是无效的,每个进程都有自己的内存区域
一.编写外部Com服务exe
1.首先新建一个winform的应用程序,并设置com程序集可见
2.编写com类
编写com接口,guid可利用vs的工具生成,代码设置com接口的可视,实现接口后,编写com工厂启用com
internal static class ComHelperClass
{
public const string s_IID_ITestComVisible = "C66C0654-49AE-4f2e-8EDA-BD01C8259C20";
public const string s_CLSID_TestComVisibleClass = "12D783BB-33BF-4973-B38B-2A8F0BA926E4";
public static readonly Guid IID_ITestComVisible = new Guid(s_IID_ITestComVisible);
public static readonly Guid CLSID_TestComVisibleClass = new Guid(s_CLSID_TestComVisibleClass);
public const string s_IID_IClassFactory = "00000001-0000-0000-C000-000000000046";
public static readonly Guid IID_IClassFactory = new Guid("00000001-0000-0000-C000-000000000046");
public static readonly Guid IID_IUnknown = new Guid("00000000-0000-0000-C000-000000000046");
[DllImport("ole32.dll")]
public static extern int CoRegisterClassObject(
[MarshalAs(UnmanagedType.LPStruct)] Guid rclsid,
[MarshalAs(UnmanagedType.IUnknown)] object pUnk,
uint dwClsContext,
uint flags,
out uint lpdwRegister);
[DllImport("ole32.dll")]
public static extern int CoRevokeClassObject(uint dwRegister);