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