STAThread属性在Native C++中的设置

          近期在搞一个给c#软件的加壳的工具,实际上就是用c++给c#裹上一层,没有什么技术含量,忽悠一下初级破解者,自己用,找点儿安慰罢了哦。

          只要思路是,把c#的exe  A.exe,加密一下,作为 c++ B.exe的资源文件,用户运行B.exe以后,B从资源文件里面读出A,解密,用户Native引导 .net的程序运行。

具体方法见 (采用Native 引导方式的.Net加密保护http://www.chinaz.com/program/2008/0208/22778_2.shtml

        程序实现以后调试了几个demo的exe,可以正常运行,但是遇到我真正要保护的那个 exe,就报出异常来了。ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated because the current thread is not in a single-threaded apartment ,因为我的程序里面使用了webbrowser,而webbrowser 只能在STAThread 中运行,本来的程序运行是没有问题的,因为我确实是在main函数上加了STAThread这个属性的,猜想这个属性就是给.net loader用的,而自己写的这个loader 没有去处理这个属性,所以程序不是以STAThread运行了。几经周折,终于找到了在 C++中设置 STAThread 的方法:

    MTA调用 CoInitializeEx(NULL, COINIT_MULTITHREADED)
    STA 调用CoInitializeEx(NULL, COINIT_APARTMENTTHREADED)

     调用CoInitializeEx(NULL, COINIT_APARTMENTTHREADED)要在CorBindToRuntimeEx执行前,要不然设置不会成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值