日期:2014-05-17  浏览次数:20879 次

求助,winform 安装包 UNSAFE代码块无效
案例描述:

使用c#开发一个WINFORM应用,目的是生成计算机硬件指纹,
使用到第三方提供的动态库组件,包含若干DLL,

供应商提供接口如下,其中UNSAFE关键字是我自己加上去的,项目生成属性里也设置了允许执行不安全的代码。

一:定义导入动态库
[DllImport("hasp_act_windows.dll", CharSet = CharSet.Ansi, EntryPoint = "hasp_act_activate")]
        public unsafe static extern uint hasp_act_activate(int handle, string c2v, string product_key, ref string v2c);

二:调用接口
 public uint hasp_act_activate(string c2v, string product_key, ref string v2c)
{
            uint status = 0;
            v2c = " ";
            try
            {
                unsafe
                {
                    status = HaspActivation.hasp_act_activate(this.handle, c2v, product_key, ref v2c);
                }
            }
            catch (System.DllNotFoundException)
            {
                throw new System.DllNotFoundException(strError);
            }

            return status;
        }

三:调用
string v2c = " ";
unsafe
{
  state = act.hasp_act_activate(c2v, productKey, ref v2c);
}


问题来了:
在VS2010里直接F5调试,无论是在DEBUG或者release模式下均可正常运行,
可是在项目物理目录下直接运行DEBUG或者RELEASE下的项目.exe文件则抛出个异常,
System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
   在 HaspActivation.hasp_act_activate(Int32 handle, String c2v, String product_key, String& v2c)
制作出来的安装包也出现如上错误。

本人在GOOGLE,百度,BING下搜了几天解决方案无果,甚至在Program.cs里把MAIN函数也加上UNSAFE,可依旧无效,还报一线希望在这里向各位师傅求教下,看看各位有无解决方案指点一二,多谢大家的帮助。
WINFORM? unsafe

------解决方案--------------------
第三方动态库出的问题,

检查第三方动态库所需文件是否齐全,
手工安装第三方动态库,先测试其是否可工作。
------解决方案--------------------
引用:
Quote: 引用:

第三方动态库出的问题,

检查第三方动态库所需文件是否齐全,