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

VB中写的DLL在ASP.NET中调用总是错误
在VB中写了个DLL ,放在VB中运行正常,但在C#中却总是显示“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”不知是什么原因,请大侠们请点。

调用的代码如下:

 public class Utility 
    {
      [DllImport("AES.dll", EntryPoint = "AesLock", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
         public static extern string AesLock(string s, string p);

      [DllImport("AES.dll", EntryPoint = "AesUnLock", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
      public static extern string AesUnLock(string s, string p);

    } 


protected void btnLogin_Click(object sender, EventArgs e)
    {
        string PS = "";
         PS = Utility.AesLock("test", "123456");
     }
------最佳解决方案--------------------
VB不支持产生标准的具有导出函数的dll,你应该使用ActiveX DLL,然后再在.NET程序中引用。

也许你可能用一些Hack方法制作带有导出函数的dll。并且在VB中可以正确调用,它的原理是通过额外的操作让链接器(Linker)产生导出函数表,但是这并不足以让VB产生的dll正常工作,因为VB的dll需要额外的代码初始化VB的虚拟机(msvbvm*0.dll),而除了VB程序为宿主进程,其它程序都不能正确处理,所以导致运行异常。
------其他解决方案--------------------
以上生成的DLL已经使用了AmicForVB做成了标准和DLL。我在想是不是我的调用方法有问题?还是什么问题。
------其他解决方案--------------------
我已经说了,不是你的问题。
------其他解决方案--------------------
引用:
我已经说了,不是你的问题。


好的!我在想想看有没有其它的办法!多谢!
------其他解决方案--------------------
引用:
引用:我已经说了,不是你的问题。

好的!我在想想看有没有其它的办法!多谢!


我也说了,使用这些Hack办法没有必要,VB本身支持ActiveX DLL,可以正大光明地使用。
------其他解决方案--------------------
关键是我要在ASP.NET中要调用这个DLL。因程序原先是用VB写的。
------其他解决方案--------------------
是啊,有什么问题呢?你没有VB程序的源代码?
------其他解决方案--------------------
有的。附件中的就是。
http://www.vbgood.com/forum.php?mod=attachment&aid=NDY3OTR8YTllZjRlZTN8MTM1MzgzNTExNXwxNzE3OTd8MTE1OTA1
------其他解决方案--------------------
引用:
是啊,有什么问题呢?你没有VB程序的源代码?

版主可否有时间帮我看看,这个DLL在VB或VB.NET中要用ByRef按地址传值。但在C#中,使用了Ref传递还是不行。不知有什么办法,还是DLL有问题。
------其他解决方案--------------------
历经N天的折腾,终于搞定了!结贴,散分!