c#64位调用32位DLL,进程外Com服务(exe)编写调用

网上有些进程外的一些资料,但有些简单,研究了两天写了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);
 
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值