none
win7 系统 C#引入dll运行出错 无法加载 DLL“hqpTBfile.dll”: 内存位置访问无效。 (异常来自 HRESULT:0x800703E6)。 RRS feed

  • 问题

  • 下面是代码  在xp系统上运行正确 win7系统错误信息:无法加载 DLL“hqpTBfile.dll”: 内存位置访问无效。 (异常来自 HRESULT:0x800703E6)。

     [DllImport("hqpTBfile.dll", EntryPoint = "DecryptStr", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]

            public static extern string DecryptStr(string strvalue, ref string passkey);

                String passwordkey = "a@bz#3v!";

                String inputstr = "fasdfasd";
                string retStr = DecryptStr(inputstr, ref passwordkey);
                Console.WriteLine(retStr); 

    2010年12月22日 1:58

答案

  • 查了一下那个 HRESULT,意思是 Invalid access to memory location。也就是访问了无效的内存地址。这个问题应该是 DLL 加载成功了但是调用方法失败了。原因很可能是制作这个 API 的人没有考虑到 x64 的系统兼容性所致。可能没有其他办法了,除非可以拿到源代码或者利用反汇编进行调试。
    Mark Zhou
    2010年12月22日 9:19
  • dear
    这是你自己写的元件还是引用别人的?若是别人写的你得去跟他要X86版本的

    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    别人写的呀  我上那找他要去哟  就没别的办法了吗?  谢谢.....
    人生吧,0岁出场,10岁成长;20为情彷徨;30基本定向;40拼命打闯;50回头望望;60告老还乡;70搓搓麻将;80晒晒太阳; 90躺在床上;100挂在墙上...生的伟大,死得凄凉!能牵手的时候,请别只是肩并肩,能拥抱的时候,请别只是手牵手,能在一起的时候,请别轻易分开!

    DEAR

    是的,微軟也有元件不支援x64,比如OLEBD,只能使用别的元件,寻找其他解决方案,如果没其它方案表示只能在x86模式下执行


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2010年12月24日 1:06

全部回复

  • win7 是 64bit的么?

    你要强制制定你的项目是x86 cpu 编译试试,主要是你dll可能是32bit下开发的。

     


    family as water
    2010年12月22日 2:22
  • 是 64bit的呀 强制制定你的项目是x86 cpu 编译  试过了不行  郁闷 中.........
    人生吧,0岁出场,10岁成长;20为情彷徨;30基本定向;40拼命打闯;50回头望望;60告老还乡;70搓搓麻将;80晒晒太阳; 90躺在床上;100挂在墙上...生的伟大,死得凄凉!能牵手的时候,请别只是肩并肩,能拥抱的时候,请别只是手牵手,能在一起的时候,请别轻易分开!
    2010年12月22日 2:25
  • dear
    这是你自己写的元件还是引用别人的?若是别人写的你得去跟他要X86版本的

    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2010年12月22日 3:38
  • dear
    这是你自己写的元件还是引用别人的?若是别人写的你得去跟他要X86版本的

    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    别人写的呀  我上那找他要去哟  就没别的办法了吗?  谢谢.....
    人生吧,0岁出场,10岁成长;20为情彷徨;30基本定向;40拼命打闯;50回头望望;60告老还乡;70搓搓麻将;80晒晒太阳; 90躺在床上;100挂在墙上...生的伟大,死得凄凉!能牵手的时候,请别只是肩并肩,能拥抱的时候,请别只是手牵手,能在一起的时候,请别轻易分开!
    2010年12月22日 6:44
  • 查了一下那个 HRESULT,意思是 Invalid access to memory location。也就是访问了无效的内存地址。这个问题应该是 DLL 加载成功了但是调用方法失败了。原因很可能是制作这个 API 的人没有考虑到 x64 的系统兼容性所致。可能没有其他办法了,除非可以拿到源代码或者利用反汇编进行调试。
    Mark Zhou
    2010年12月22日 9:19
  • dear
    这是你自己写的元件还是引用别人的?若是别人写的你得去跟他要X86版本的

    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    别人写的呀  我上那找他要去哟  就没别的办法了吗?  谢谢.....
    人生吧,0岁出场,10岁成长;20为情彷徨;30基本定向;40拼命打闯;50回头望望;60告老还乡;70搓搓麻将;80晒晒太阳; 90躺在床上;100挂在墙上...生的伟大,死得凄凉!能牵手的时候,请别只是肩并肩,能拥抱的时候,请别只是手牵手,能在一起的时候,请别轻易分开!

    DEAR

    是的,微軟也有元件不支援x64,比如OLEBD,只能使用别的元件,寻找其他解决方案,如果没其它方案表示只能在x86模式下执行


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2010年12月24日 1:06