求助,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,可依旧无效,还报一线希望在这里向各位师傅求教下,看看各位有无解决方案指点一二,多谢大家的帮助。
------解决方案--------------------第三方动态库出的问题,
检查第三方动态库所需文件是否齐全,
手工安装第三方动态库,先测试其是否可工作。
------解决方案--------------------